Creando falso Daemon con GNU Screen

Monitorear ejecución de comando en background

En uno de mis post anteriores hablé sobre como utilizar una tablet como monitor externo, pero al paso de los días me di cuenta que es probable que se cierre x11vnc sin motivo aparente. Es por esto que busqué la forma de monitorizar que la aplicación esté en ejecución y de no ser así se ejecuté de nuevo automáticamente. En el siguiente post te voy a mostrar como generé ese falso daemon.

Daemon script

Screen es un multiplexor de terminal, el cual nos facilita trabajar con varios procesos al mismo tiempo, el cuál nos permite intercambiar entre tareas como si de ventanas se tratase, pero desde un mismo terminal. Esta herramienta nos va a facilitar el correr un bucle que cada cinco segundos verifique que una aplicación se encuentre en ejecución.

La instalación es sencilla, para Debian basta con:

sudo apt install screen

Después de esto ya podemos generar las sesiones que queramos, para el caso del ejemplo lo haríamos ejecutando un script de la siguiente forma:

screen -dmS vMonitor ~/.script.sh

Dónde -dmS se encarga de generar una sesión en segundo plano con el nombre vMonitor en la cuál se ejecuta el script ~/.script.sh. Dentro de este script tenemos el bucle que va a revisar cada 5 segundos si se está ejecutando la aplicación que queremos monitorear, en mi caso x11vnc.

while :
do
  if pgrep x11vnc > /dev/null
  then
    echo running
  else
    x11vnc -forever -bg -viewonly -allow 192.168.0.4 -clip 1280x800+3520+0
  fi
  sleep 5
done

Con esto conseguimos la ejecución automática del comando en caso de que se crashee y al mismo tiempo tenemos la posibilidad de visualizar el proceso ya que queda se queda ejecutando en background. Para ver si el loop sigue en ejecución sólo basta listar las sesiones de screen:

screen -ls 

Lo que nos mostrará todas las sesiones en ejecución y donde deberíamos ver por lo menos vMonitor, a la cuál podríamos acceder con:

screen -r vMonitor

En cuyo caso constataríamos que el bucle está en ejecución ya que se estaría mostrando la palabra “running” cada 5 segundos. Y para salir de esta sesión manteniendo el bucle vivo sólo basta con presionar ctrl + a d.

Con esto logramos mantener la aplicación corriendo en todo momento y en caso de que por alguna razón esta llegue a cerrarse en un lapso máximo de 5 segundos se ejecutará de nuevo. Espero que te sea de utilidad, y no olvides que si tienes dudas o aportes me puedes compartir tus comentarios abajo o por twitter @engell25. Nos leemos pronto.

 
comments powered by Disqus