Avvio e arresto dei servizi di Systemd
systemdè il nuovo modo di eseguire i servizi su Linux. systemd ha un sysvinit sostituito . systemd porta tempi di avvio più rapidi a Linux ed è ora un modo standard per gestire i servizi Linux. Sebbene stabile, systemd è ancora in evoluzione.
systemd come sistema di inizializzazione, viene utilizzato per gestire sia i servizi che i daemon che necessitano di modifiche di stato dopo l'avvio del kernel Linux. In base alla modifica dello stato vengono applicati l'avvio, l'arresto, il ricaricamento e la regolazione dello stato del servizio.
Innanzitutto, controlliamo la versione di systemd attualmente in esecuzione sul nostro server.
[centos@localhost ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[centos@localhost ~]$
A partire dalla versione 7 di CentOS, completamente aggiornata al momento della stesura di questo documento, la versione 219 di systemd è la versione stabile corrente.
Possiamo anche analizzare l'ora dell'ultimo avvio del server con systemd-analysis
[centos@localhost ~]$ systemd-analyze
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s
[centos@localhost ~]$
Quando i tempi di avvio del sistema sono più lenti, possiamo usare il comando systemd-analyse blame .
[centos@localhost ~]$ systemd-analyze blame
40.882s kdump.service
5.775s NetworkManager-wait-online.service
4.701s plymouth-quit-wait.service
3.586s postfix.service
3.121s systemd-udev-settle.service
2.649s tuned.service
1.848s libvirtd.service
1.437s network.service
875ms packagekit.service
855ms gdm.service
514ms firewalld.service
438ms rsyslog.service
436ms udisks2.service
398ms sshd.service
360ms boot.mount
336ms polkit.service
321ms accounts-daemon.service
Quando si lavora con systemd , è importante comprendere il concetto di unità .Unitssono le risorse che Systemd sa interpretare. Le unità sono classificate in 12 tipi come segue:
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
Per la maggior parte, lavoreremo con .service come obiettivi di unità. Si consiglia di fare ulteriori ricerche sugli altri tipi. Poiché solo le unità .service si applicano all'avvio e all'arresto dei servizi di systemd .
Ogni unità è definita in un file situato in uno dei due -
/lib/systemd/system - file di unità di base
/etc/systemd/system - file di unità modificati avviati in fase di esecuzione
Gestisci i servizi con systemctl
Per lavorare con systemd , avremo bisogno di familiarizzare con il comando systemctl . Di seguito sono riportate le opzioni della riga di comando più comuni per systemctl .
Interruttore | Azione |
---|---|
-t | Valore separato da virgole dei tipi di unità come servizio o socket |
-un | Mostra tutte le unità caricate |
--stato | Mostra tutte le unità in uno stato definito, ovvero: carico, secondario, attivo, inattivo, ecc. |
-H | Esegue l'operazione in remoto. Specificare il nome host o l'host e l'utente separati da @. |
Utilizzo di base di systemctl
systemctl [operation]
example: systemctl --state [servicename.service]
Per una rapida occhiata a tutti i servizi in esecuzione sul nostro box.
[root@localhost rdc]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service loaded active exited Availability of block devices
bluetooth.service loaded active running Bluetooth service
chronyd.service loaded active running NTP client/server
Interruzione di un servizio
Per prima cosa, interrompiamo il servizio Bluetooth.
[root@localhost]# systemctl stop bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded inactive dead Bluetooth service
[root@localhost]#
Come possiamo vedere, il servizio bluetooth è ora inattivo.
Per avviare nuovamente il servizio Bluetooth.
[root@localhost]# systemctl start bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded active running Bluetooth service
[root@localhost]#
Note- Non abbiamo specificato bluetooth.service, poiché .service è implicito. È una buona pratica pensare al tipo di unità che aggiunge il servizio con cui abbiamo a che fare. Quindi, da qui in poi, utilizzeremo l' estensione .service per chiarire che stiamo lavorando sulle operazioni delle unità di servizio.
Le azioni principali che possono essere eseguite su un servizio sono:
Inizio | Avvia il servizio |
Fermare | Interrompe un servizio |
Ricaricare | Ricarica la configurazione attiva di un servizio senza arrestarlo (come kill -HUP in system v init) |
Ricomincia | Avvia, quindi arresta un servizio |
Abilitare | Avvia un servizio all'avvio |
disattivare | Interrompe l'avvio automatico di un servizio in fase di esecuzione |
Le azioni di cui sopra vengono utilizzate principalmente nei seguenti scenari:
Inizio | Per richiamare un servizio che è stato messo in stato di interruzione. |
Fermare | Per arrestare temporaneamente un servizio (ad esempio quando un servizio deve essere arrestato per accedere ai file bloccati dal servizio, come quando si aggiorna il servizio) |
Ricaricare | Quando un file di configurazione è stato modificato e si desidera applicare le nuove modifiche senza interrompere il servizio. |
Ricomincia | Nello stesso scenario del ricaricamento, ma il servizio non supporta il ricaricamento . |
Abilitare | Quando vogliamo che un servizio disabilitato venga eseguito all'avvio. |
disattivare | Utilizzato principalmente quando è necessario interrompere un servizio, ma viene avviato all'avvio. |
Per controllare lo stato di un servizio:
[root@localhost]# systemctl status network.service
network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago
Docs: man:systemd-sysv-generator(8)
Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)
localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...
localhost.localdomain network[923]: Bringing up loopback interface: [ OK ]
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.
[root@localhost]#
Mostraci lo stato attuale del servizio di rete . Se vogliamo vedere tutti i servizi relativi al networking, possiamo utilizzare -
[root@localhost]# systemctl --all -t service | grep -i network
network.service loaded active exited LSB: Bring up/
NetworkManager-wait-online.service loaded active exited Network Manager
NetworkManager.service loaded active running Network Manager
ntpd.service loaded inactive dead Network Time
rhel-import-state.service loaded active exited Import network
[root@localhost]#
Per chi ha familiarità con il sysinitmetodo di gestione dei servizi, è importante effettuare la transizione a systemd . systemd è il nuovo modo di avviare e arrestare i servizi daemon in Linux.