
Tengo amule-daemon instalado en Debian 11 WSL. El proceso amuleweb falla de vez en cuando, por lo que necesito reiniciarlo.
Estoy intentando automatizar esto con el siguiente script bash:
#!/bin/bash
if [[ $(pgrep amuleweb) ]]; then
echo "amuleweb is running..";
else
echo "amuleweb is not running, restarting now..";
amuleweb --amule-config-file=/home/debian/.aMule/amule.conf
fi
pero no importa si amuleweb se está ejecutando o no (lo estoy comprobando con "ps aux | grep amule"), el script siempre devuelve "amuleweb se está ejecutando..."
Este es un ejemplo con amuleweb detenido.
debian@CUSPIDE:~$ ./amuleweb.sh
amuleweb is running..
debian@CUSPIDE:~$ [[ $(pgrep amuleweb) ]]
debian@CUSPIDE:~$ echo $?
1
Si ejecuto el comando pgrep directamente desde una terminal, funciona, pero dentro de mi script siempre devuelve "0".
¿Cómo lo soluciono? Gracias
Respuesta1
Hagamos una suposición fundamentada de que el nombre de su script podría incluir la cadena amuleweb
. Si este es el caso, entonces pgrep
hay que encontrar el script en ejecución. La mejor práctica aquí sería utilizar el formulario pgrep -f
(o -x
, como señaló @TomYan en los comentarios) para asegurarse de que coincide con el ejecutable deseado.
También podría considerar el usuario de un administrador de procesos para este tipo de escenario (reiniciar un servicio fallido) en lugar de implementar el suyo propio. Si bien WSL ahora incluye la capacidad de usar Systemd, probablemente sería excesivo aquí a menos que ya lo tenga habilitado por otras razones. Echa un vistazo asupervisorcomo un supervisor de procesos bastante liviano y fácil de configurar que puede reiniciar servicios fallidos.