Per certo se conoscete un minimo Linux avrete usato dei comandi che sono presenti come servizi di sistema. Ad esempio, un programma appena installato nelle istruzioni ci sarà un “nome-comando” ed eventuali parametri da fornire se presenti.
Quel “nome-comando” non fa riferimento a nessuna path specifica, per cui non sappiamo esattamente a quali file si sta facendo capo. È presente nella path del nostro sistema. Già ma come, e soprattutto se ne volessimo creare uno per conto nostro?
Chiaramente è possibile vediamo come. Quando scriviamo un comando questo viene cercato nella “service unit” ovvero dei file con estensione “.service” che sono controllati da Systemd.
Questi file sono generalmente posizionati in due cartelle:
/etc/systemd/system e /usr/lib/systemd/system
Potrebbero, in base alle varie distribuzioni, esserci delle differenze. Nella cartella su di un livello superiore vedremo altre cartelle, in linea di massima per quanto spiegato in questo articolo quelle che vi indico vanno bene.
A questo punto dobbiamo comprendere l’anatomia di un file .service, esso è composto da almeno tre sezioni: Unit, Service e Install.
Unit serve per identificare, spiegare ed enumerare il servizio che andiamo ad aggiungere. Eventuali dipendenze e anche in quale condizione avviarsi, ad esempio dopo un altro specifico servizio.
[Unit]
Description=Programma di prova per testare systemd
Requires=Network.target
After=Network.target
INILa sezione è sempre racchiusa tra parentesi quadre, al suo interno (indenate sullo stesso livello) i parametri.
Service invece è il cuore del meccanismo, dato che qui saranno indicate le informazioni meccaniche del servizio, ad esempio la posizione del file eseguibile.
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/mioprogramma -p parametro-avvio
ExecStop=/usr/local/bin/mioprogramma -p parametro-stop
INIDa notare ExecStart e ExecStop che corrisponderanno al comando “mioservizio start” o “mioservizio stop”
Install permette la gestione del sistema, ad esempio da quali tipologie di demoni può essere utilizzato, o eventualmente quali dipendenze necessita per un corretto utilizzo.
[Install]
WantedBy=multi-user.target
INIA questo punto possiamo salvare il file, come utente ROOT, ad esempio lo chiamiamo mioservizio.service dentro /etc/systemd/system
Possiamo provare subito ad attivarlo con
sudo systemctl start mioservizio
BashQuanto sopra però non sarà persistente ad un riavvio della macchina, per ovviare a questo problema dovremo dare il comando
sudo systemctl enable mioservizio
BashChiaramente all’interno del file service ci sono moltissimi altri parametri che trovate elencati a questo link:
https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html
Conclusioni
Come si può intuire da questa piccola guida, se creiamo un qualche tipo di programma e desideriamo richiamarlo con una path, questa è la strada corretta per creare un servizio associato che può anche essere avviato al boot della macchina.