¿Cómo monitorear y reiniciar un script automáticamente?

Publicado 8 de septiembre de 2024

Problema: Mantener los procesos en ejecución

Los procesos pueden fallar o detenerse sin previo aviso, lo que puede interrumpir los servicios y causar tiempo de inactividad. Reiniciar estos procesos manualmente lleva tiempo y no es eficiente, especialmente para sistemas importantes que deben funcionar constantemente.

Solución: Script Bash para monitoreo y reinicio de procesos

Creación de un script Bash

Un script Bash puede monitorear y reiniciar un script Python si deja de ejecutarse. Las partes principales de este script Bash incluyen:

  • Un bucle que se ejecuta continuamente
  • Un comando para verificar si el script Python está en ejecución
  • Lógica para iniciar el script Python si no está en ejecución

El script verifica si el proceso Python está en ejecución utilizando el comando pgrep. Si no se encuentra el proceso, el script lo inicia nuevamente. Este método es simple para mantener un script en ejecución.

Consejo: Registro para solución de problemas

Agrega registro a tu script Bash para rastrear cuándo se reinicia el script Python. Esto puede ayudar con la solución de problemas y el monitoreo de la frecuencia de los reinicios. Puedes hacerlo agregando una línea para escribir en un archivo de registro:

echo "$(date): Reiniciando $SCRIPT_NAME" >> /ruta/al/reinicio.log

Coloca esta línea justo antes de que se reinicie el script Python en tu script Bash.

Implementación del script Bash

Así es cómo escribir el script Bash:

  1. Abre un editor de texto y crea un nuevo archivo llamado monitor_script.sh.

  2. Agrega este contenido al archivo:

#!/bin/bash

SCRIPT_NAME="checkqueue.py"
SCRIPT_PATH="/ruta/a/checkqueue.py"

while true; do
    if ! pgrep -f "$SCRIPT_NAME" > /dev/null; then
        echo "Iniciando $SCRIPT_NAME"
        python3 "$SCRIPT_PATH" &
    fi
    sleep 60
done
  1. Guarda el archivo y hazlo ejecutable con el comando: chmod +x monitor_script.sh

Expliquemos cada parte del script:

  • #!/bin/bash le dice al sistema que use bash para ejecutar este script.
  • Las variables SCRIPT_NAME y SCRIPT_PATH almacenan el nombre y la ruta completa del script Python.
  • El bucle while true hace que el script se ejecute continuamente.
  • pgrep -f "$SCRIPT_NAME" verifica si hay un proceso en ejecución que coincida con el nombre del script.
  • Si no se encuentra el proceso, el script lo inicia usando python3 "$SCRIPT_PATH" &.
  • El comando sleep 60 hace que el script espere 60 segundos antes de verificar nuevamente.

Para usar este script, reemplaza /ruta/a/checkqueue.py con la ruta real de tu script Python. Luego puedes ejecutar el script Bash en segundo plano o agregarlo a los procesos de inicio de tu sistema para mantener tu script Python en ejecución en todo momento.