Metodi di pagamento Abuse

Come eseguire il riavvio automatico di un servizio Linux

26.02.2021, 20:42

Spesso si verifica una caduta spontanea del servizio. L'utente deve occuparsi del ripristino manuale. Non c'è alcun problema in quanto tale, se ciò avviene su un computer di casa. Anzi, è un bene, perché c'è una reale opportunità di determinare lo stato del servizio, identificare i guasti ed eliminarli. Ma la situazione è ben diversa quando si tratta di server e servizi VPS, che devono lavorare costantemente per fornire l'accesso a un sito web o a un'applicazione. In questo articolo vedremo come configurare il riavvio automatico dei servizi Linux in diversi modi: con uno script di monitoraggio eseguito periodicamente tramite cron e in systemd.

Riavvio automatico in systemd

L'impostazione predefinita prevede che Systemd non faccia nulla con il servizio se si blocca. Ma l'utente può sempre configurare le impostazioni in modo tale che, in caso di arresto o crash del servizio, questo venga riavviato automaticamente. A tale scopo, si utilizza la direttiva Restart, da aggiungere alla sezione Service. Vediamo quindi un esempio di configurazione del riavvio automatico del servizio Apache:

$ sudo systemctl edit apache2

[Service]

Restart=on-failure

RestartSec=5s

настройка автоматического перезапуска сервиса Apache:

Qui RestartSec specifica il tempo di attesa prima di riavviare il servizio. Al termine, salvare le modifiche ed eseguire il comando daemon-reload per rileggere la configurazione:

$ sudo systemctl daemon-reload

Successivamente, per verificare se tutto funziona correttamente, si può esaminare lo stato del processo, terminandolo con un segnale di kill:

 $ sudo systemctl status apache2

$ kill -KILL 32091

Процесс сигналом kill

Controllare nuovamente lo stato, il processo dovrebbe essere in esecuzione. Per impostare l'inizializzazione in modo che venga eseguita ogni volta, si può usare la direttiva speciale Restart: always. Ma bisogna fare molta attenzione quando la si usa, perché non consente di terminare il processo anche se è necessario. Se il processo si blocca continuamente, per cui viene riavviato, si può aggiungere un limite al numero di riavvii alla sezione Service:

$ sudo systemctl edit apache2

[Service]

StartLimitIntervalSec=500

StartLimitBurst=5

Restart=on-failure

RestartSec=5s

Лимит на количество перезапусков в секцию Service

Qui StartLimitBurst e StartLimitIntervalSec indicano l'importanza di riavviare il servizio cinque volte e, se si blocca tutte e cinque le volte, di lasciarlo stare e non toccarlo. La seconda direttiva limita i riavvii del servizio a 500 secondi.

Riavvio automatico tramite script

Questo è probabilmente il metodo più affidabile e a prova di errore che funziona in tutte le versioni di Linux. In Apache è facile creare un riavvio automatico utilizzando uno script. Per farlo, è necessario inserire il comando:

$  sudo vi /usr/local/bin/apache-monitor.sh

#!/bin/bash

ps -A | grep apache2 || systemctl start apache2

Salvare il file e assicurarsi di renderlo eseguibile:

chmod ugo+x /usr/local/bin/apache-monitor.sh

Non dimenticate di aggiungere una voce cron per eseguire lo script periodicamente:

$ sudo crontab -e

*/5 * * * * /usr/local/bin/apache-monitor.sh

Tutto qui. L'impostazione del riavvio automatico del servizio non è così semplice come può sembrare a prima vista. Ma si tratta di un'abilità importante, quindi dovreste prestarvi attenzione: ne vale sicuramente la pena.