Premier Training & Business Partner Red Hat

systemctl: il tool di base per gestire SystemD

Alessandro Lorenzi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

Inauguriamo con systemctl un ciclo di articoli tecnici su SystemD.

systemctl é il tool con cui gestiamo gran parte degli aspetti di SystemD e va a sostituire gran parte delle funzioni dei comandi service e chkconfig. Vedremo qui come analizzare lo stato del sistema, gestire lo stato della macchina e – aspetto forse piú importante – gestire le units.

TIP aggiungendo -H user@host possiamo eseguire il comando su una macchina remota via ssh.

2014-02-25-101546_1053x347_scrot

Analizzare lo stato del sistema

Se volevamo vedere lo stato dei servizi attivi sulla macchina con avremmo usato il comando:

service --status-all

Con systemctl invece possiamo dare il comando senza alcun parametro, oppure per visualizzare solo i servizi che hanno dato errore diamo il comando con il parametro –failed.

systemctl
# gdm.service                                                              loaded active running   GNOME Display Manager
# gpm.service                                                              loaded active running   Console Mouse manager
# irqbalance.service                                                       loaded active running   irqbalance daemon
 
systemctl --failed
# UNIT           LOAD   ACTIVE SUB    DESCRIPTION
# mcelog.service loaded failed failed Machine Check Exception Logging Daemon
# rngd.service   loaded failed failed Hardware RNG Entropy Gatherer Daemon
#
# LOAD   = Reflects whether the unit definition was properly loaded.
# ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
# SUB    = The low-level unit activation state, values depend on unit type.
# 
# 2 loaded units listed. Pass --all to see loaded but inactive units, too.
# To show all installed unit files use 'systemctl list-unit-files'.

Dalle estensioni del nome, vedrete che ci saranno diversi tipi di units: .automount, .mount, .device, .service etc etc. Vedremo piú avanti di cosa esattamente si tratta, vi basti sapere che i daemon sono quelli con estensione .service.

Gestione dei servizi

Vediamo ora come sostituire i vecchi comandi

service myservice [start|stop|restart|status]
chkconfig myservice [on|off]

Abbiamo detto che i servizi hanno estensione .service, quindi myservice verrá ora chiamato myservice.service.

Iniziamo con l’abilitare il servizio:

systemctl enable httpd.service
# ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

Adesso il servizio Apache verrá avviato all’avvio. Allo stesso modo usiamo il comando disable per disabilitarlo.

Ora vedremo come studiarne lo stato, avviare e fermare il servizio.

systemctl status httpd.service
# httpd.service - The Apache HTTP Server
#    Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
#    Active: inactive (dead)
systemctl start httpd.service
systemctl status httpd.service
# httpd.service - The Apache HTTP Server
#    Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
#    Active: active (running) since Tue 2014-02-25 08:39:56 CET; 16s ago
#  Main PID: 18285 (httpd)
#    Status: "Total requests: 0; Current requests/sec: 0; Current # traffic:   0 B/sec"
#    CGroup: /system.slice/httpd.service
#            ├─18285 /usr/sbin/httpd -DFOREGROUND
#            ├─18286 /usr/sbin/httpd -DFOREGROUND
#            ├─18287 /usr/sbin/httpd -DFOREGROUND
#            ├─18288 /usr/sbin/httpd -DFOREGROUND
#            ├─18289 /usr/sbin/httpd -DFOREGROUND
#            └─18290 /usr/sbin/httpd -DFOREGROUND
# 
# Feb 25 08:39:56 alorenzi-vaio.local systemd[1]: Started The Apache HTTP Server.
systemctl stop httpd.service

Notate quanti dettagli restituisce systemctl service quando il servizio é attivato: non solo mostra se il servizio é acceso o spento, ma anche il PID, il cgroup, e anche le ultime righe di log del servizio.

Gestione energetica

Possiamo anche utilizzare systemd per riavviare, spegnere, sospendere e ibernare la macchina, rispettivamente:

systemctl reboot
systemctl poweroff
systemctl suspend
systemctl hibernate

Se utilizziamo il tool polkit anche gli utenti saranno in grado di utilizzare il power management di systemctl senza dover inserire alcuna password e senza configurare sudo. Su Fedora gli utenti amministratori sono giá configurati per poter utilizzare queste funzioni.

Info about author

Alessandro Lorenzi

RHCE Consultant at Extraordy