Dopo un deploy su una VPS o su un server dedicato, i problemi più fastidiosi non sono sempre nell’applicazione: spesso arrivano da systemd, journald o dalle regole di tmpfiles. Se il servizio non parte, i log non si scrivono o una directory attesa sparisce al reboot, conviene fare subito una verifica breve e ripetibile.
Diagnosi probabile
La causa più comune è una combinazione di questi fattori:
- unità systemd aggiornata ma non ricaricata con
daemon-reload; - permessi o directory runtime create male da
tmpfiles.d; - journald pieno, inattivo o non scrivibile dal servizio;
- override locali che cambiano l’ambiente del servizio dopo il deploy.
Verifiche immediate
- Controlla lo stato del servizio e l’ultimo errore utile:
systemctl status nome-servizio --no-pager
Esito atteso:active (running)oppure un messaggio chiaro sul fallimento. - Leggi i log recenti del servizio:
journalctl -u nome-servizio -b --no-pager -n 50
Esito atteso: nessun errore di permessi, path mancanti o bind falliti. - Verifica se systemd ha caricato davvero la nuova unità:
systemctl cat nome-servizio
Esito atteso: il contenuto mostrato deve includere le ultime modifiche del deploy. - Controlla eventuali regole tmpfiles legate al servizio:
systemd-tmpfiles --cat-config | grep -i nome-servizio
Esito atteso: una regola coerente per directory, socket o file runtime. - Se il servizio usa directory temporanee o runtime, verifica che esistano e abbiano i permessi giusti:
ls -ld /run/nome-servizio /var/lib/nome-servizio
Esito atteso: owner e permessi compatibili con l’utente del servizio.
Soluzione consigliata passo-passo
- Ricarica systemd prima di riavviare il servizio:
systemctl daemon-reload
Serve quando hai modificato unità, drop-in o file in/etc/systemd/system/. - Applica le regole tmpfiles, se hai aggiunto o cambiato directory/file runtime:
systemd-tmpfiles --create
Esito atteso: creazione delle risorse mancanti senza errori. - Riavvia il servizio e verifica subito il risultato:
systemctl restart nome-servizio
poisystemctl is-active nome-servizio
Esito atteso:active. - Se il servizio continua a fallire, isola il problema con il log del boot corrente:
journalctl -u nome-servizio -b -p warning..alert --no-pager
Scopo: vedere solo i messaggi davvero rilevanti. - Se usi un file di override, ricontrolla che non abbia sovrascritto
WorkingDirectory,UseroEnvironmentin modo incoerente con il deploy.
Controlli finali / rollback
- Verifica che il servizio resti su dopo un secondo restart:
systemctl restart nome-servizio && systemctl is-active nome-servizio
Condizione di successo: stato stabile e log puliti. - Controlla che journald stia ricevendo nuovi eventi del servizio:
journalctl -u nome-servizio -b --no-pager -n 5
Esito atteso: nuove righe coerenti con l’avvio. - Se il problema è nato dopo una modifica, fai rollback ripristinando il vecchio unit file o il vecchio drop-in e ripeti
systemctl daemon-reloadprima del riavvio. - Se hai toccato
tmpfiles.de il servizio si è rotto, rimuovi la regola introdotta, poi rieseguisystemd-tmpfiles --createsolo dopo aver verificato il percorso corretto.
Checklist minima da tenere dopo ogni deploy: ricarica unità, crea risorse tmpfiles, controlla i log, verifica lo stato attivo, prova un riavvio rapido.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.