EQVPS
Inizia

Come creare un servizio systemd per tenere un'app in funzione

Trasforma qualsiasi script o app in un servizio gestito che si avvia al boot, si riavvia se crasha, e logga su journalctl. Scrivi un file unit, abilitalo, e controlla il suo stato — il modo standard per far girare qualcosa 24/7 su Linux.

Far girare un'app con & o nohup va bene finché il server non si riavvia, il processo non crasha, o vuoi trovare i suoi log — poi crolla. systemd è la risposta standard: avvia la tua app al boot, la riavvia se muore, e cattura i suoi log. Trasformare uno script o un binario in un servizio gestito è un piccolo file.

1. Scrivi un file unit

Crea /etc/systemd/system/myapp.service:

[Unit]
Description=My application
After=network.target

[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Regola ExecStart, WorkingDirectory e User sulla tua app. Restart=always è ciò che la tiene viva.

2. Crea un utente dedicato (consigliato)

sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp

Far girare come utente non-root limita il danno se l'app viene mai compromessa.

3. Abilitalo e avvialo

sudo systemctl daemon-reload
sudo systemctl enable --now myapp

enable lo fa avviare al boot; --now lo avvia immediatamente.

4. Controlla stato e log

sudo systemctl status myapp
journalctl -u myapp -f       # segui i log live

Comandi di ogni giorno

sudo systemctl restart myapp   # riavvia dopo un cambiamento
sudo systemctl stop myapp      # fermalo
sudo systemctl disable myapp   # smetti di avviarlo al boot

Cautele oneste

Prossimi passi

Un servizio systemd è come tieni qualsiasi cosa in funzione 24/7 — per esempio un agente AI che gira 24 ore su 24 o il relay dietro un server RustDesk self-hosted. Se la tua app è invece containerizzata, il --restart unless-stopped di Docker gioca lo stesso ruolo — vedi come installare Docker.

FAQ

Perché usare systemd invece di far girare semplicemente l'app in background?

Un processo in background (con & o nohup) muore al riavvio, non torna se crasha, e sparpaglia i suoi log. Un servizio systemd si avvia automaticamente al boot, si riavvia in caso di fallimento, e manda il suo output a journalctl. È il modo standard e affidabile per far girare qualcosa a lunga durata su Linux.

Dove vanno i file unit?

I tuoi servizi vanno in /etc/systemd/system/, un file per servizio, chiamato qualcosa.service. Dopo averne creato o modificato uno, esegui 'systemctl daemon-reload' così systemd recepisce il cambiamento, poi abilitalo e avvialo.

Cosa fa 'Restart=always', e ci sono svantaggi?

Dice a systemd di riavviare il servizio ogni volta che esce, per qualsiasi motivo — la chiave per tenere qualcosa in funzione. L'unico trucco è un loop di crash: se l'app fallisce all'istante all'avvio, systemd continua a riavviarla. Aggiungi 'RestartSec=5' per distanziare i tentativi, e controlla i log per sistemare l'errore sottostante.

Come vedo i log del servizio?

Usa 'journalctl -u yourservice -f' per seguire l'output live, o senza -f per leggere la cronologia. systemd cattura stdout e stderr automaticamente, quindi non devi collegare file di log da solo.

Il servizio dovrebbe girare come root?

Preferibilmente no. Crea un utente dedicato non-root e imposta 'User=' nella unit, così una compromissione dell'app non consegna tutta la macchina. Fai girare come root solo quando il servizio ne ha genuinamente bisogno.

Commenti

Ancora nessun commento. Sii il primo.

Lascia un commento

I commenti sono moderati prima di comparire.