Systemd in Debian Jessie

I runlevel che caratterizzavano SysVinit vengono soppiantati dai target di systemd.
Un target è uno “stato” del sistema, definito in appositi file nella directory /lib/systemd/system.
In generale, un target viene definito ereditando la configurazione di un altro target “genitore”. Un particolare stato del sistema prevede più target attivi contemporaneamente:

# vedere i target attivi:
systemctl list-units --type=target
# vedere tutti i target installati, attivi e non:
systemctl list-units --type=target --all

Creare un target personalizzato

Bisogna creare un file /etc/systemd/system/personalizzato.target, prendendo come base un target esistente (ad esempio /lib/systemd/system/graphical.target).
Se necessario, creare la directory /etc/systemd/system/personalizzato.wants e creare i link ai servizi presenti in /lib/systemd/system/ che si vuole attivare nel target.

Per spostarsi da un target ad un altro si usa il comando

systemctl isolate personalizzato.target

che attiverà il target senza modificare il target di destinazione al successivo riavvio.

Il target di avvio è “linkato” a default.target:

ls -l /lib/systemd/system/default.target
/lib/systemd/system/default.target -> graphical.target

Per avviare il sistema ad un determinato target ci sono diversi modi:

  1. passare al kernel il parametro systemd.unit=personalizzato.target
  2. systemctl enable personalizzato.target : questo funziona solo se nel file personalizzato.target è presente
    [Install]
    Alias=default.target
    

    ed il suo effetto è quello di modificare il link simbolico di default.target.
    Usare lo switch -f se il link già esiste e si ottiene l’ errore Failed to issue method call: File exists

  3. creare il link manualmente:
    ln -sf path/to/personalizzato.target /etc/systemd/system/default.target
    

Comandi vari

# monitorare lo stato di una unità:
systemctl status nome.unità

# l' albero del control group
systemd-cgls

# le dipendenze di una unità:
systemctl show -p "Wants" nome.target

# avvio, arresto, riavvio dei servizi:
systemctl start servicename
systemctl stop servicename
systemctl reload servicename
systemctl restart servicename
systemctl try-restart servicename
# restart riavvia il servizio, avviando l' unità se non è attiva
# try-restart non fa nulla se il servizio non è già attivo

# Attivare o disattivare servizi in un target:
systemctl disable servicename
systemctl enable servicename
#ciò consente ancora un controllo manuale (start stop ecc...)
#per impedire il controllo manuale usare:
systemctl mask servicename
#l' unità viene linkata a /dev/null
# per togliere la maschera:
systemctl unmask servicename

Capire un file di un servizio

Il file del servizio /lib/systemd/system/nginx.service :

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=/usr/sbin/nginx -s quit

[Install]
WantedBy=multi-user.target
  • After= dichiara che il servizio deve essere avviato solo dopo che network.target è completato
  • Type=forking indica che il servizio segue il tradizionale pattern del forking daemon unix
  • PIDFile indica il file PID. In systemd non è strettamente necessario perchè c’è già un sistema che tiene traccia dei processi avviati da una unità.
    Nel caso di un daemon fork è però raccomandato per permettere a systemd di identificare il processo principale del demone (vedere man systemd.service)
  • I vari Exec specificano i comandi eseguiti in caso di start/stop/restart ecc….
  • WantedBy specifica le unità in cui il servizio in questione verrà “richiesto”: infatti, in questo caso di esempio, il comando systemctl enable nginx creerà un link simbolico al servizio nginx nella directory “wants” relativa a multi-user.target (vedere la spiegazione in man systemd.unit)

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...