Daemontools o cómo relanzar un proceso si muere

2 minute read


Quizás te ha pasado que un proceso (programa o servicio) en el sistema muere o termina abruptamente y necesitas relanzarlo sin importar qué pase. Podrías tratar de monitorear el proceso cada cierto tiempo y reiniciarlo si no es encontrado pero esto puede ser algo complicado porque tendrías que hacer una tarea con cron para verificar la existencia del proceso, filtrarlo, etc. Y si hubiese una forma de relanzar el proceso si este muere?…Si hay una forma, y se llama daemontools el cual básicamente escanea el proceso y lo relanza si este muere.

Aquí explicaré como instalar y configurar en Linux.

Instalación de  daemontools

En Debian puedes instalar daemontools como root escribiendo esto:

aptitude install daemontools-run daemontools

Para distribuciones derivadas de Debian como Ubuntu debería ser lo mismo. En Red Hat y similares deben chequear el nombre del paquete para esta herramienta.

Primera ejecución

Al momento de instalar el paquete se crean una llamada a /usr/bin/svscanboot (puedes verlo en archivo /etc/init/svscan.conf) que se ejecutará al reiniciar el sistema. Si no quieres reiniciar el sistema puedes ejecutar svscanboot manualmente:

nohup /usr/bin/svscanboot &

Configurando daemontools

Debes crear un directorio para el servicio (programa) a monitorear. En este ejemplo usaré  qbittorrent-nox, un cliente de bittorrent que corre en el segundo plano (nox = no para ambiente X):

mkdir /etc/service/qbittorrent-nox

Luego tienes que escribir un script que inicie el proceso. Debe llamarse “run“. Utiliza tu editor de texto preferido, por ejemplo vi:

vi /etc/service/qbittorrent-nox/run

Añade la llamada al programa. En este caso quería lanzar qbitorrent-nox como el usuario pi, así que lo invoqué con sudo:

#!/bin/sh

sudo -u pi qbittorrent-nox

Por último cambia la permisología para hacerlo ejecutable:

chmod +x /etc/service/qbittorrent-nox/run

Verificando el proceso con ps

Puedes verificar si el proceso está corriendo usando la orden ps y filtrando la salida con grep:

ps ax | grep qbit
 
3064 ? S 0:00 supervise qbittorrent-nox
3068 ? S 0:00 sudo -u pi qbittorrent-nox
3080 ? Sl 13:09 qbittorrent-nox 
9926 pts/0 S+ 0:00 grep qbit

Pero hay una mejor forma de verificar si el proceso está corriendo usando daemontools. Por cierto, como su nombre lo indica en inglés, daemon-tools quiere significa herramientas para el manejo de demonios (programas o servicios).

Verificando el proceso con daemontools

Si quieres verificar si el proceso está corriendo y dede hace cuánto ha estado arriba, usa la orden svtat pasándole el directorio de servicio, como muestro a continuación:

svstat /etc/service/qbittorrent-nox

/etc/service/qbittorrent-nox: up (pid 3066) 205846 seconds

En este caso, my proceso bittorrent-nox (programa/servicio) ha estado corriendo casi por dos días y medio

Detener el escaneo

Si necesitas detener el escaneo del proceso, por ejemplo si necesitas detenerlo por unos instantes para hacer cambios a la configuración, usa la orden svc: con las siguiente opción

svc -d /etc/service/qbittorrent-nox

Después de esto chequea una vez más:

svstat /etc/service/qbittorrent-nox

/etc/service/qbittorrent-nox: down 2 seconds, normally up

Ahora el proceso no será verificado para ser relanzado si se detiene o muere.

Reiniciando el escaneo

Para iniciar nuevamente el escaneo, usa la orden svc como sigue:

svc -u /etc/service/qbittorrent-nox

Una vez más verifica si está correindo con svstat:

svstat /etc/service/qbittorrent-nox
/etc/service/qbittorrent-nox: up (pid 12805) 1 seconds

Referencia: daemontoolsl

Leave a Comment