Daemontools o cómo relanzar un proceso si muere
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