Da System V (SysVinit) a Systemd

A partire dalla versione 259 di Systemd, gli script SystemV sono stati deprecati e già con la versione 260 Systemd tali script non saranno più supportati. Vista l’imminente rilascio della nuova versione di Systemd è arrivato il momento di convertire gli script SystemV (SysV) a systemd. Fortunatamente nei casi più semplici la conversione è veramente basilare.

Uno script SysV solitamente gestisce start, stop e restart tramite un costrutto case. In systemd, queste azioni vengono mappate in sezioni specifiche.

Ecco un esempio di uno script SysV /etc/init.d/mio-servizio

# ... intestazione LSB ...
case "$1" in
  start)
    /usr/bin/mio-eseguibile --daemon
    ;;
  stop)
    killall mio-eseguibile
    ;;
esac

Questo script sopra può essere trasformato in un nuovo file unit per Systemd /etc/systemd/system/mio-servizio.service

[Unit]
Description=Il Mio Servizio
After=network.target

[Service]
ExecStart=/usr/bin/mio-eseguibile
Type=simple
Restart=on-failure

[Install]
WantedBy=multi-user.target

Ecco una rapida descrizione di come creare il file di unit.

La Sezione [Unit] contiene metadati e dipendenze.
Description: Una breve frase che descrive il servizio.
After: Indica a systemd di aspettare che un altro servizio sia pronto (es. network.target per la rete o mysql.service per il database).

La Sezione [Service] contiene la logica di esecuzione della unit.
Type:

  • simple (default): Se il processo resta in primo piano.
  • forking: Se il processo si “stacca” dalla shell (tipico dei vecchi demoni).

ExecStart: Il percorso assoluto del comando.
ExecStop: Opzionale. Se non specificato, systemd uccide il processo in modo pulito.
User/Group (facolatativo): Puoi specificare con quale utente far girare il processo (molto più sicuro che farlo girare come root).
Restart: Se messo su on-failure per far sì che il servizio si riavvia da solo se crasha.

La sezione [Install] serve per la configurazione dell’avvio del servizio.
WantedBy: multi-user.target: equivale a dire che il servizio deve partire nel “runlevel 3” (modalità normale multi-utente).

Una volta creato il file unit esso va messo in /etc/systemd/system/ e va ricaricata la configurazione di SystemD (o riavviato il sistema) con il comando:

sudo systemctl daemon-reload

Per abilitare l’avvio automatico del servizio al boot: sudo systemctl enable mio-servizio.service
Per lanciare il servizio: sudo systemctl start mio-servizio.service
Per controllare lo stato del servizio: sudo systemctl status mio-servizio.service

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

GNU/Linux

Articolo precedente

Come installare TinyProxy in Debian 13