Restart=on-failure non è Restart=always
Data Pubblicazione: | | Operatività

Restart=on-failure non è Restart=always

on-failure riavvia gli errori, non SIGTERM. always riavvia anche l’uscita pulita, ma non uno systemctl stop. Il default è no. L’attesa default è 100 ms. Oneshot rifiuta always.

Restart=on-failure riavvia il servizio quando il processo esce male. Restart=always lo riavvia anche quando esce bene. Nessuno dei due scatta se a fermare l’unità è systemctl stop. Non è una probe HTTP: quella differenza è nella scheda su liveness e readiness. Rilettura del 14 ottobre 2026 sul manuale systemd.service del tag v257.

In breve: il default è no. Per un servizio che deve restare su, il manuale consiglia on-failure. SIGTERM è un’uscita pulita, quindi on-failure non riavvia. Type=oneshot rifiuta always e on-success. L’attesa prima del riavvio, se non la imposti, è 100 ms.

Cosa trovi in questo articolo

  1. Il default e le sette parole

  2. Che cosa è un’uscita pulita

  3. La matrice, senza abbreviarla

  4. Stop, limiti, oneshot

  5. Errori da evitare

  6. In sintesi

Il default e le sette parole

Fonte: man/systemd.service.xml del tag v257, voce Restart=, letta il 14 ottobre 2026. La stessa voce, nella pagina Debian bookworm di systemd.service(5), dice le stesse cose sulla scelta del valore. Non è la policy di riavvio di un container: quel manuale non la descrive, e questa scheda non la inventa.

Restart= decide se riavviare quando il processo del servizio esce, viene ucciso o scade un timeout. Il processo può essere il principale oppure uno di ExecStartPre=, ExecStartPost=, ExecStop=, ExecStopPost= o ExecReload=. Se a farlo morire è un’operazione di systemd (stop o restart del servizio), non viene riavviato. I timeout comprendono il watchdog e i timeout di start, reload e stop.

I valori sono no, on-success, on-failure, on-abnormal, on-watchdog, on-abort e always. no è il default: nessun riavvio. Il manuale indica on-failure come scelta consigliata per i servizi long-running. Se il servizio deve potersi chiudere da solo senza ripartire subito, l’alternativa scritta lì è on-abnormal.

La scheda è nel cluster Operatività.

Che cosa è un’uscita pulita

Uscita pulita, nel testo v257, significa una di queste: codice 0; per i tipi diversi da Type=oneshot, uno dei segnali SIGHUP, SIGINT, SIGTERM o SIGPIPE; oppure uno stato o un segnale elencato in SuccessExitStatus=. on-success riavvia solo in questi casi.

on-failure riavvia se il codice è diverso da zero, se arriva un segnale che non è uno di quei quattro (core dump compreso), se un’operazione va in timeout, o se scade il watchdog. Un processo che termina con SIGTERM non rientra. È il punto che si perde quando si legge «on-failure vuol dire ogni morte».

La matrice, senza abbreviarla

La tabella del manuale segna con una X i casi in cui quel valore riavvia. La colonna no è vuota su tutte le righe. Qui le X sono quelle del testo v257, non una sintesi.

Causa di uscitaalwayson-successon-failureon-abnormalon-aborton-watchdog
Uscita pulita (codice o segnale)sìsìnononono
Codice non pulitosìnosìnonono
Segnale non pulitosìnosìsìsìno
Timeoutsìnosìsìnono
Watchdogsìnosìsìnosì

on-abort, in prosa, riavvia solo se il processo esce per un segnale non marcato come uscita pulita. on-watchdog solo se scade il watchdog. always riavvia sia sull’uscita pulita sia su segnale anomalo sia su timeout. Il codice non pulito non fa scattare on-abnormal: la riga della tabella è vuota, e la prosa di on-abnormal non cita il codice diverso da zero.

Stop, limiti, oneshot

Due eccezioni stanno sopra la tabella. Non si riavvia se il codice o il segnale è in RestartPreventExitStatus=, né se l’unità è fermata con systemctl stop o un’operazione equivalente. Si riavvia comunque se il codice o il segnale è in RestartForceExitStatus=. Il riavvio è anche soggetto al rate limit di StartLimitIntervalSec= e StartLimitBurst=, rimandati a systemd.unit(5).

Type=oneshot non viene mai riavviato su un’uscita pulita: always e on-success sono rifiutati. RestartSec= è l’attesa prima del riavvio. Nel v257 il default è 100 ms. RestartSteps= sale da RestartSec= verso RestartMaxDelaySec= solo se quest’ultimo è impostato; il default di RestartSteps= è 0, cioè disattivo.

Errori da evitare

  • Mettere always per «non perderlo» e poi stupirsi se un’uscita 0 lo rialza. È il comportamento scritto.

  • Credere che on-failure riavvii dopo SIGTERM. Quel segnale è pulito.

  • Credere che systemctl stop venga contraddetto da always. Lo stop di systemd non riavvia.

  • Usare always su un Type=oneshot. Il manuale lo rifiuta.

  • Confondere questa chiave con una liveness probe. La probe non è Restart=.

In sintesi

on-failure è il riavvio sugli errori, non su SIGTERM e non sullo stop. always include anche l’uscita pulita, salvo lo stop di systemd e salvo l’oneshot. Default no, attesa default 100 ms, consiglio del manuale per i long-running: on-failure. Verifica del 14 ottobre 2026 sul tag v257.

Copertina: Christopher Bowns, «Virginia Tech - data center», Wikimedia Commons, CC BY-SA 2.0. È una sala macchine vera, non un diagramma di systemd e non un test eseguito su quella sala.

Domande frequenti

no. Il manuale systemd.service del tag v257, voce Restart=, rilettura 14 ottobre 2026: con no il servizio non viene riavviato.
No. SIGTERM è uno dei quattro segnali di uscita pulita, insieme a SIGHUP, SIGINT e SIGPIPE. on-failure li esclude.
No. Se a fermare l’unità è systemctl stop o un’operazione equivalente, il servizio non viene riavviato, qualunque sia Restart=.
No. Type=oneshot non viene riavviato su un’uscita pulita: always e on-success sono rifiutati.
RestartSec= nel tag v257 ha default 100 ms. RestartSteps= resta 0, quindi disattivo, finché non imposti anche RestartMaxDelaySec=.

Potrebbe interessarti anche...