Come eseguire un server python come servizio

Come eseguire un server python come servizio

In questo breve post vedremo come startare un programma in python come servizio.

Supponiamo di avere scritto il nostro programma nel file test.py.

Per avviarlo come servizio in background, nella directory system scriviamo il file test.service che identificherà e avvierà il nostro file come servizio

sudo nano /etc/systemd/system/test.service

Inseriamo nel file i seguenti comandi:

[Unit]
Description=descrizione del servizio
After=multi-user.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/python3 /home/<username>/test.py
[Install]
WantedBy=multi-user.target

Naturalmente occorrerà sostituire <username> con il nome utente con cui ci si è loggati.

Restart=always assicura che il servizio sia riavviato ad ogni riavvio della macchina. ExecStart accoglie il comando da eseguire come servizio. Nel nostro caso si tratta del file test.py scritto e da avviare con python3.

multi-user.target normalmente definisce uno stato del sistema in cui tutti i servizi di rete vengono avviati e il sistema accetterà gli accessi, ma non viene avviata una GUI locale. Questo è lo stato di sistema predefinito tipico per i sistemi server. In altre parole l’istruzione WantedBy=multi-user.target dice a systemd che questo servizio deve essere avviato come parte del normale avvio del sistema, indipendentemente dal fatto che sia attiva o meno una GUI locale.

Salviamo e chiudiamo il file e effettuiamo il reload del daemon con sudo systemctl daemon-reload

Abilitiamo il servizio con sudo systemctl enable test.service

Infine effettuaiamone lo start con sudo systemctl start test.service

Altri comandi utili sono:

per il restart sudo systemctl restart test.py

per lo stop sudo systemctl stop test.py

per conoscere lo stato del servizio sudo systemctl status test.py

Ci sono delle funzioni che permettono di vedere gli stati del servizio. Ad esempio il seguente comando permette di verificare se il servizio è attivo.

systemctl is-active test.py

In ogni caso già il comando “status” fornisce quasi tutte le informazioni necessarie.

Il seguente comando fornisce la lista di tutti i servizi attivi.

systemctl list-units

Possiamo anche filtrare la lista per stati. Il seguente comando restituisce solo i servizi inattivi.

systemctl list-units --all --state=inactive

NB: in realtà quanto scritto vale per qualunque linguaggio di programmazione.

Possiamo trovare maggiori informazioni e una lista dei comandi completa qui.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.