Come riavviare automaticamente i servizi non riusciti su Non-systemd
Sulle distribuzioni Linux basate su systemd, la gestione e il riavvio automatico dei servizi dopo un errore è relativamente semplice. Tuttavia, molti sistemi Linux più vecchi o minimali si basano su sistemi di init
alternativi come SysVinit e Upstart, che richiedono approcci diversi per gestire e riavviare i servizi.
In questa guida, esploreremo come riavviare automaticamente un servizio non riuscito su sistemi non systemd utilizzando SysVinit e Upstart.
1. Riavvio automatico dei servizi con SysVinit
SysVinit è uno dei più vecchi sistemi di init
, comunemente usato in distribuzioni come Debian e CentOS prima della transizione a systemd.
Passaggio 1: Installare e configurare monit
Monit è un'utilità leggera e open source che monitora i servizi e li riavvia automaticamente quando non funzionano.
# On Debian/Ubuntu
sudo apt update
sudo apt install monit
On CentOS/RHEL
sudo yum install monit
Passaggio 2: Configurare Monit per il monitoraggio di un servizio
Modificare il file di configurazione Monit:
sudo nano /etc/monit/monitrc
Aggiungere una definizione di servizio:
# Example: Monitor Apache service
check process apache2 with pidfile /var/run/apache2/apache2.pid
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed port 80 protocol http then restart
if 5 restarts within 5 cycles then timeout
Spiegazione della definizione di servizio di cui sopra:
- check process apache2 – Definisce il servizio da monitorare.
- start/stop program – Comandi per avviare e arrestare il servizio.
- in caso di errore porta 80: si riavvia se la porta HTTP diventa irraggiungibile.
Successivamente, abilita, avvia e verifica lo stato di monit.
sudo systemctl enable monit
sudo systemctl start monit
sudo monit status
2. Riavvio automatico dei servizi con Upstart
Upstart era il sistema di init
predefinito su Ubuntu prima di systemd
, e utilizza i file di configurazione situati in /etc/init/
per definire la gestione dei servizi.
Passaggio 1: Creare un file di configurazione Upstart
Creare una configurazione Upstart personalizzata per il servizio.
sudo nano /etc/init/apache2.conf
Aggiungi il seguente contenuto.
# Apache service monitoring
description "Apache2 Service"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
exec /usr/sbin/apache2ctl -D FOREGROUND
Spiegazione della configurazione di cui sopra:
- respawn: riavvia automaticamente il servizio in caso di errore.
- limite di rigenerazione 10 5 – Limita i riavvii a 10 tentativi entro 5 secondi per evitare riavvii eccessivi.
Successivamente, abilitare, avviare e gestire il servizio.
sudo start apache2
sudo stop apache2
sudo status apache2
Per abilitare automaticamente il servizio all'avvio.
sudo update-rc.d apache2 defaults
3. Utilizzo di Cron per riavviare manualmente i servizi
Se monit o Upstart non sono disponibili, un approccio di fallback consiste nell'utilizzare un cron job per controllare e riavviare periodicamente il servizio.
Creare uno script di shell.
sudo nano /usr/local/bin/check_apache.sh
Aggiungi il seguente contenuto.
#!/bin/bash
if ! pgrep -x "apache2" > /dev/null
then
/etc/init.d/apache2 start
fi
Rendere eseguibile lo script.
sudo chmod +x /usr/local/bin/check_apache.sh
Aggiungere un cron job per eseguire lo script.
sudo crontab -e
Aggiungi la riga seguente per controllare il servizio ogni 5 minuti.
*/5 * * * * /usr/local/bin/check_apache.sh
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 trovare i servizi in esecuzione in Linux con i comandi systemd
Conclusione
Il riavvio automatico dei servizi guasti su sistemi non systemd richiede un po' più di configurazione manuale, ma strumenti come monit, Upstart o script cron possono gestire in modo efficiente i guasti del servizio e mantenere le applicazioni in esecuzione senza problemi.
Se stai ancora utilizzando un sistema non systemd, potrebbe valere la pena considerare un aggiornamento a una distribuzione basata su systemd per una gestione più semplice del servizio.