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.