System V, systemd e Upstart
Controllo dei servizi Linux
Processo init
Il processo init sui sistemi Linux è comunemente conosciuto come la madre di tutti i processi. Il processo “init” avrà sempre un ID di processo di “1” (pid di 1), è il primo processo avviato dal kernel sul tuo sistema. init è l’abbreviazione di inizializzazione ed è usato per avviare tutti gli altri processi e il tuo runlevel di default. Col tempo molte distribuzioni hanno adottato lo standard System V per la gestione dei servizi, tuttavia, altre distribuzioni si sono spostate su “Systemd” o “Upstart”.
SysV – System V
Se la tua distribuzione Linux usa gli standard “SysV”, allora init esaminerà un file chiamato “/etc/inittab. Questo file contiene il runlevel predefinito con cui il sistema dovrebbe partire. Per esempio “id:3:initdefault:” avvierà automaticamente tutti gli script nelle strutture delle directory del runlevel 3.
Livello di esecuzione 1 – Modalità utente singolo
Livello di esecuzione 2 – Come il livello di esecuzione 3, ma senza NFS
Livello di esecuzione 3 – Modalità multiutente e di rete
Livello di esecuzione 4 – Inutilizzato
Livello di esecuzione 5 – Come il livello di esecuzione 3, ma con desktop grafico (X window System)
Per maggiori informazioni sul processo di avvio: Avvio di Linux
Eseguire gli script init del “Sistema V”
Quasi spesso come amministratore avrete bisogno di fermare, avviare, riavviare o ricaricare un particolare servizio/demone. Per fare questo si usa un comando chiamato “service”. Questo comando permette di eseguire gli script “System V” che normalmente si trovano all’interno della directory “/etc/init.d”. Oltre ad essere in grado di avviare e fermare un servizio/demone, possiamo anche visualizzare lo stato corrente.
esempi di comando service
Verifica dello stato: Qui stiamo richiedendo lo stato attuale del demone “sshd”
# service sshd statusopenssh-daemon (pid 1599) is running...
Status Check on all Processes: Esegue tutti i vostri script init in ordine alfabetico con l’opzione status. Di seguito un estratto dell’output di questo comando:
# service --status-allabrt-ccpp hook is installedabrtd (pid 1708) is running...abrt-dump-oops (pid 1716) is running...acpid (pid 1487) is running...atd (pid 1740) is running...auditd (pid 1262) is running...automount (pid 1571) is running...avahi-daemon (pid 1375) is running...Usage: /etc/init.d/bluetooth {start|stop}certmonger (pid 1752) is running...cpuspeed is stoppedcrond (pid 1724) is running...cupsd (pid 1476) is running...dnsmasq is stoppedfirstboot is not scheduled to runhald (pid 1496) is running...
Stop: Qui abbiamo richiesto che il demone “sshd” si fermi. Anche l’opzione status è stata rilasciata per controllare il nuovo stato.
# service sshd stopStopping sshd: # service sshd statusopenssh-daemon is stopped
Start: Questa volta stiamo richiedendo che “sshd” sia avviato.
# service sshd startStarting sshd:
Riavvia: Questa volta stiamo andando a “rimbalzare” il demone “sshd” (fermare e poi riavviare immediatamente).
# service sshd restartStopping sshd: Starting sshd:
Ricaricare: L’opzione “reload” è molto utile se si sono apportate modifiche a un file di configurazione e si desidera portare queste modifiche all’interno.
# service sshd reloadReloading sshd:
Upstart
Upstart è un rimpiazzo basato su eventi per il demone “init”. Upstart è stato scritto da un ex dipendente della nota azienda che ci fornisce Ubuntu (Canonical). L’idea dietro Upstart era quella di allontanarsi dal tradizionale processo di avvio in cui i compiti che venivano avviati dovevano essere completati prima che il compito successivo potesse iniziare. Upstart è un sistema guidato dagli eventi che gli permette di rispondere agli eventi di sistema in modo asincrono. Upstart è responsabile dell’avvio e dell’arresto dei servizi e dei compiti all’avvio e allo spegnimento. Monitora anche attivamente questi servizi e compiti. Upstart è anche in grado di eseguire script sysvinit senza modifiche. Varie distribuzioni hanno incluso Upstart come sostituto di System V. Queste hanno incluso RHEL, CentOS, Fedora. Tuttavia, molti di questi sistemi sono ora passati a “systemd”
Come abbiamo visto prima, possiamo controllare i servizi/daemon con il comando “service” sotto System V, tuttavia, sotto Upstart si usa un comando diverso. Il comando che viene utilizzato con Upstart è “initctl”. Questo comando vi permette di comunicare con il demone init. Sotto ci sono alcuni esempi di base del comando “initctl” in uso.
esempi di comando initctl
Controllo dello stato: Questa opzione richiede lo stato del lavoro specificato.
root@john-desktop:~# initctl status cupscups start/running, process 672
Il nome del lavoro è dato prima seguito dall’obiettivo corrente e dallo stato dell’istanza e poi dal numero id del processo.
Stop: L’opzione “stop” specifica che lo stato desiderato deve essere “stopped”.
root@john-desktop:~# initctl stop cupscups stop/waiting
Start: L’opzione “start” avvierà una nuova istanza del lavoro specificato.
root@john-desktop:~# initctl start cupscups start/running, process 3574
Restart: Questa opzione farà ripartire il lavoro specificato. L’istanza riavviata manterrà la sua configurazione originale.
root@john-desktop:~# initctl restart cupscups start/running, process 3606
Reload: Questa opzione ricaricherà l’istanza specificata.
root@john-desktop:~# initctl reload cups
Lista: List richiede la visualizzazione di tutti i lavori/istanze e del loro stato associato. Di seguito un esempio dell’output di questo comando:
root@john-desktop:~# initctl listavahi-daemon start/running, process 611mountall-net stop/waitingnmbd stop/waitingpasswd stop/waitingrc stop/waitingrsyslog start/running, process 601tty4 start/running, process 1080udev start/running, process 437upstart-udev-bridge start/running, process 429
Reload Configuration: Questa opzione richiede che il demone init ricarichi i suoi file di configurazione. Nessun lavoro viene riavviato da questo comando.
root@john-desktop:~# initctl reload-configuration cups
In circostanze normali, non dovrebbe essere necessario emettere il suddetto comando di ricaricamento poiché “init” sorveglia le sue directory di configurazione con “inotify” e ricarica automaticamente in caso di cambiamento.
systemd
systemd è un altro sostituto di System V. systemd sta per demone di sistema. Il suo nome è intenzionalmente in minuscolo! systemd è stato progettato per consentire una migliore gestione delle dipendenze e avere la capacità di gestire più lavoro in parallelo all’avvio. systemd supporta lo snapshotting del sistema e il ripristino dello stato del sistema, tiene traccia dei processi memorizzati in quello che è noto come un “cgroup” in contrasto con il convenzionale metodo “PID”. systemd è ora stato adottato da molte distribuzioni Linux popolari. Fedora, Mandriva, Mageia, Arch Linux. Ci sono anche piani per includere systemd nelle nuove versioni di RHEL (Red hat).
Come abbiamo visto con “System V” e “Upstart” entrambi i tipi hanno il loro comando unico per controllare i servizi. Lo stesso vale per systemd. Il comando che viene usato sotto systemd è “systemctl”. Sotto ci sono alcuni esempi di alcune delle funzionalità di base del comando “systemctl”.
comando systemd | Descrizione | |
---|---|---|
systemctl start mytest.service | Avvia il servizio specificato | |
systemctl stop mytest.service | Ferma il servizio specificato | |
systemctl status mytest.service | Richiede lo stato del servizio specificato | |
systemctl list-unit-files –type=service | Lista i servizi conosciuti che possono essere avviati o fermati | |
systemctl restart mytest.service | Avvia e poi ferma il servizio specificato | |
systemctl reload mytest.service | Se supportato ricarica i file di configurazione | |
systemctl enable mytest.service | Equivalente a chkconfig mytest on | |
systemctl disable mytest.service | Equivalente a chkconfig mytest off | |
systemctl is-enabled mytest.service | Controlla se il servizio è configurato per essere avviato nel runlevel corrente |