Come monitorare e riavviare uno script automaticamente?

Pubblicato 8 settembre 2024

Problema: Mantenere i processi in esecuzione

I processi possono arrestarsi o interrompersi senza preavviso, causando interruzioni dei servizi e tempi di inattività. Riavviare questi processi manualmente richiede tempo e non è efficiente, soprattutto per sistemi importanti che devono funzionare costantemente.

Soluzione: Script Bash per il monitoraggio e il riavvio dei processi

Creazione di uno script Bash

Uno script bash può monitorare e riavviare uno script Python se smette di funzionare. Le parti principali di questo script bash includono:

  • Un ciclo che viene eseguito continuamente
  • Un comando per verificare se lo script Python è in esecuzione
  • Una logica per avviare lo script Python se non è in esecuzione

Lo script verifica se il processo Python è in esecuzione utilizzando il comando pgrep. Se il processo non viene trovato, lo script lo avvia nuovamente. Questo metodo è semplice per mantenere uno script in esecuzione.

Suggerimento: Logging per la risoluzione dei problemi

Aggiungi il logging al tuo script bash per tenere traccia di quando lo script Python viene riavviato. Questo può aiutare nella risoluzione dei problemi e nel monitoraggio della frequenza dei riavvii. Puoi farlo aggiungendo una riga per scrivere in un file di log:

echo "$(date): Riavvio di $SCRIPT_NAME" >> /percorso/del/file/riavvio.log

Inserisci questa riga appena prima del riavvio dello script Python nel tuo script bash.

Implementazione dello script Bash

Ecco come scrivere lo script bash:

  1. Apri un editor di testo e crea un nuovo file chiamato monitor_script.sh.

  2. Aggiungi questo contenuto al file:

#!/bin/bash

SCRIPT_NAME="checkqueue.py"
SCRIPT_PATH="/percorso/di/checkqueue.py"

while true; do
    if ! pgrep -f "$SCRIPT_NAME" > /dev/null; then
        echo "Avvio di $SCRIPT_NAME"
        python3 "$SCRIPT_PATH" &
    fi
    sleep 60
done
  1. Salva il file e rendilo eseguibile con il comando: chmod +x monitor_script.sh

Spieghiamo ogni parte dello script:

  • #!/bin/bash indica al sistema di usare bash per eseguire questo script.
  • Le variabili SCRIPT_NAME e SCRIPT_PATH memorizzano il nome e il percorso completo dello script Python.
  • Il ciclo while true fa sì che lo script venga eseguito continuamente.
  • pgrep -f "$SCRIPT_NAME" verifica se è in esecuzione un processo che corrisponde al nome dello script.
  • Se il processo non viene trovato, lo script lo avvia usando python3 "$SCRIPT_PATH" &.
  • Il comando sleep 60 fa attendere lo script per 60 secondi prima di controllare di nuovo.

Per utilizzare questo script, sostituisci /percorso/di/checkqueue.py con il percorso effettivo del tuo script Python. Puoi quindi eseguire lo script bash in background o aggiungerlo ai processi di avvio del tuo sistema per mantenere il tuo script Python sempre in esecuzione.