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
- Esegui
daemon-reloaddopo aver modificato un file unit, o systemd usa la vecchia versione. - Sorveglia i loop di crash. Se l'app fallisce all'istante,
Restart=alwaysriprova all'infinito —RestartSec=5distanzia i tentativi; sistema l'errore di fondo tramite i log. - Preferisci un
User=non-root così un'app compromessa non possiede tutto il server.
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.
Commenti
Ancora nessun commento. Sii il primo.