Come configurare i servizi in Linux con systemd

LINUX, TUTORIAL

In questo articolo spiegherò come configurare un servizio linux utilizzando systemd; voglio anticipare che non mi soffermerò in spiegazioni architetturali o teoriche, perciò se voleste saperne di più potrete sempre dare un occhio a questo articolo. Voglio precisare che ho scelto di spiegare systemd, perché lo uso e perché  rispetto ad ad altri gestori, è decisamente più performante. Sollo a scopo riassuntivo vi riporto uno schema generale dell’architettura che non commenterò.

Prima di iniziare, pertanto, a capire come configurare un nuovo servizio, proviamo ad imparare qualche comando utile per la gestione dei servizi.

Lista dei comandi systemd a nostra disposizione

1) Per avviare un servizio

systemctl start SERVICE

N.B al reboot in tal caso il servizio dovrà essere riavviato manualmente.

2) per stoppare un servizio:

systemctl stop SERVICE

3) per riavviare un servizio

systemctl restart SERVICE

4)  Per effettuare il reload delle configurazione la dove previsto nel servizio, senza interruzione dello stesso.

systemctl reload SERVICE

5) Per conoscere lo stato del servizio

systemctl status SERVICE

6) Per attivare il servizio e renderlo disponibile al successivo riavvio.

systemctl enable SERVICE

7) Per disattivare il servizio e non renderlo disponibile al successivo riavvio.

systemctl disable SERVICE

8)  Per verificare se un servizio è configurato correttamente ed enable

systemctl is-enabled SERVICE

9) Per verificare se un servizio è in  running/ attivo

systemctl is-active SERVICE

10)  Per avere tutte le informazioni generali sul servizio

systemctl show SERVICE

11) Per disabilitare completamente un servizio collegandolo a /dev/null

sudo systemctl mask SERVICE

12) Per rimuove il collegamento /dev/null e ripristinare la possibilità di abilitare e / o avviare manualmente il servizio.

sudo systemctl unmask SERVICE

A questo punto abbiamo gli strumenti per gestire l’attivazione dei servizi, pertanto è arrivato il momento di capire come inizializzare un nuovo servizio che chiameremo testService che attiverà un generico script, ad esempio, scritto in python “test.py” 

Per il nostro scopo  supponiamo di salvare i nostri script  in una WorkingDirectory  a scelta, nel mio caso userò /work

In prima istanza facciamo caso che abbiamo definito il nome del servizio come .service. In systemd il concetto di servizio, infatti,  ha  una accezione  molto ampia ed connessa al concetto di units, le quali, infatti,   ci consentono di astrarre servizi, risorse di rete, dispositivi,  file system  etc.  Di seguito una lista delle opzioni a nostra disposizione:
.service:  unit che descrive come gestire un servizio o un’applicazione sul server ed  includerà come avviare o arrestare il servizio ed  in quali circostanze dovrebbe essere avviato automaticamente.
.socket: unit che  descrive un socket di rete o IPC o un buffer FIFO che systemd utilizza per l’attivazione basata su socket. A questo tipo di unit è sempre associato un file .service che verrà avviato quando sulla socket viene inizializzata l’attività definita da questa unità.
.device: unit che descrive un dispositivo di systemd. L’uso della unit .device si configura nei casi in cui potrebbe essere necessario  montare ed accedere ai dispositivi.
.mount: questa unità definisce un mountpoint sul sistema che deve essere gestito da systemd.
.automount: configura un mountpoint che verrà montato automaticamente.
.swap: questa unità descrive lo spazio di swap sul sistema. Il nome di queste unità deve riflettere il percorso del dispositivo o del file dello spazio.
.target: un’unità target viene utilizzata per fornire punti di sincronizzazione per altre unità quando si avvia o si cambia stato.
.path: questa unità definisce un path che può essere utilizzato per l’attivazione del servizio.
.timer: un’unità .timer definisce un timer che verrà gestito da systemd, in modo simile a un cron job per l’attivazione ritardata o programmata. La unit corrispondente verrà avviata al raggiungimento del timer.
.snapshot: un’unità .snapshot viene creata automaticamente dal comando snapshot di systemctl. Ti consente di ricostruire lo stato corrente del sistema dopo aver apportato modifiche.
.slice: un’unità .slice è associata ai nodi del gruppo di controllo Linux, consentendo alle risorse di essere limitate o assegnate a tutti i processi associati alla sezione.
.scope  è utilizzata per gestire set di processi di sistema creati esternamente.
Ritorniamo al nostro esempio.
Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    Comments