Ricerca nel sito web

Come riavviare automaticamente un servizio non riuscito in Linux


In un sistema Linux, i servizi (chiamati anche demoni) svolgono un ruolo fondamentale nella gestione di varie attività come l'hosting Web, la gestione di database e il networking. Tuttavia, a volte i servizi possono arrestarsi in modo anomalo o interrompersi a causa di errori, utilizzo elevato delle risorse o errori di sistema imprevisti.

Per evitare tempi di inattività e garantire operazioni fluide, gli amministratori di sistema possono configurare i servizi in modo che si riavviino automaticamente in caso di guasto, il che è particolarmente utile per i server Web (Apache, Nginx), i database (MySQL, PostgreSQL) o altre applicazioni critiche che devono essere sempre disponibili.

In questa guida, spiegheremo come utilizzare systemd per configurare un servizio Linux in modo che si riavvii automaticamente se si interrompe.

Perché riavviare automaticamente un servizio?

Esistono diversi motivi per cui potrebbe essere necessario riavviare automaticamente un servizio in Linux:

  • Ridurre al minimo i tempi di inattività: se un servizio si interrompe in modo imprevisto, i riavvii automatici garantiscono che gli utenti subiscano interruzioni minime.
  • Migliorare l'affidabilità: servizi come server Web, database e processi in background devono essere sempre in esecuzione.
  • Riduci il lavoro manuale: senza l'automazione, dovresti controllare frequentemente i servizi e riavviarli manualmente in caso di guasto.
  • Gestisci errori imprevisti: se un servizio si arresta in modo anomalo a causa di bug del software, limiti di risorse o errori di sistema, systemd può riavviarlo senza l'intervento dell'amministratore.

Ora, esaminiamo i passaggi per impostare i riavvii automatici utilizzando systemd.

Passaggio 1: identificare il servizio che si desidera riavviare

Prima di apportare modifiche, è necessario conoscere il nome esatto del servizio che si desidera configurare elencando tutti i servizi in esecuzione.

systemctl list-units --type=service --state=running

Se conosci già il nome del servizio, puoi verificarne lo stato.

systemctl status apache2

Sostituisci apache2 con il nome effettivo del servizio che desideri gestire.

Passaggio 2: Modifica la configurazione del servizio

Systemd consente di modificare il comportamento del servizio utilizzando file di configurazione personalizzati. Invece di modificare le impostazioni a livello di sistema (che possono essere sovrascritte durante gli aggiornamenti), utilizzeremo systemctl edit per creare un file di override.

Eseguire il comando seguente:

systemctl edit apache2

Questo aprirà un file vuoto nel tuo editor di testo predefinito.

Se il file non è vuoto, verranno visualizzate le impostazioni esistenti che è possibile modificare. In caso contrario, sarà necessario aggiungere la configurazione di riavvio necessaria.

Passaggio 3: aggiungere la configurazione di riavvio di Systemd

Nell'editor, aggiungi le seguenti righe.

[Service]
Restart=always
RestartSec=5s

Spiegazione di queste impostazioni:

  • Restart=always – Assicura che il servizio si riavvii ogni volta che si ferma, indipendentemente dal motivo.
  • RestartSec=5s – Dice a systemd di attendere 5 secondi prima di riavviare il servizio, il che può impedire cicli di riavvio rapidi in caso di errori ripetuti.

Una volta aggiunto, salva e chiudi il file.

Dopo aver apportato modifiche a un servizio systemd, è necessario ricaricare systemd e riavviare il servizio per assicurarsi che la nuova configurazione venga applicata:

sudo systemctl daemon-reload
sudo systemctl restart apache2

Per verificare che il servizio sia ora impostato per il riavvio automatico, eseguire:

sudo systemctl show apache2 | grep Restart

Se tutto è configurato correttamente, dovresti vedere:

Restart=always

Passaggio 4: testare il riavvio automatico in Linux

Per assicurarsi che la configurazione funzioni, è possibile arrestare manualmente il servizio e verificare se si riavvia.

sudo systemctl stop apache2

Attendi 5 secondi, quindi controlla il suo stato.

sudo systemctl status apache2

Se il servizio è di nuovo in esecuzione, il riavvio automatico funziona!

Opzioni di riavvio aggiuntive

A seconda delle tue esigenze, systemd fornisce diverse politiche di riavvio:

  • Restart=always – Il servizio si riavvia sempre, anche se è stato interrotto manualmente.
  • Restart=on-failure – Si riavvia solo se il servizio esce con un errore (ma non se viene interrotto manualmente).
  • Restart=on-abnormal – Riavvia il servizio se si blocca a causa di un segnale (come un errore di segmentazione).
  • Restart=on-watchdog – Riavvia il servizio se scade durante l'esecuzione.

Puoi sostituire Restart=always con una qualsiasi di queste opzioni in base alle tue esigenze.

Come verificare la presenza di problemi nei registri dei servizi

Se un servizio continua a non funzionare, è consigliabile controllare i log utilizzando il comando journalctl, che mostrerà i log per il servizio degli ultimi 10 minuti.

journalctl -u apache2 --since "10 minutes ago"

Per un flusso di log in tempo reale, utilizzare:

journalctl -u apache2 -f

Se siete interessati a impostare il riavvio automatico per altri sistemi di init, date un'occhiata a questi articoli:

  • Come impostare il riavvio automatico per i servizi non riusciti su OpenRC
  • Come riavviare automaticamente un servizio dopo un errore su SysVinit e Upstart
Conclusione

L'impostazione del riavvio automatico in caso di guasto dei servizi garantisce che le applicazioni critiche continuino a funzionare senza intervento manuale. Utilizzando le opzioni di riavvio di systemd, è possibile ridurre al minimo i tempi di inattività, migliorare la stabilità del sistema e ridurre la necessità di risoluzione manuale dei problemi.