Cron Job para manter o Daemon em execução?

3

vamos supor que eu tenha um cron job assim:

*/15 * * * * /path/to/thedaemon

O daemon (sendo um daemon python via from daemon import runner ) não permitirá múltiplas instâncias de si mesmo, o que por si só é muito bom. Se tentar iniciá-lo enquanto o daemon já estiver rodando, este é o resultado:

lockfile.LockTimeout: Timeout waiting to acquire lock for /tmp/thedaemon.pid

É claro que o cron job não se importa - ele pode manter o comando a seco rotineiramente para que, no caso de não estar rodando, ele comece a rodar. Mas isso não é muito elegante.

Mais elegantemente, existe uma maneira de configurar o cron job para saber se o daemon está sendo executado antes de iniciá-lo? Talvez uma condição se curta?

Em resumo, como configuro a tarefa cron para garantir que o daemon esteja em execução?

Se estiver correndo, não faça nada. Se não estiver em execução, inicie.

    
por 1Up 21.06.2015 / 17:58

1 resposta

4

Você pode envolver seu daemon python em um script de shell. Quando você iniciar pela primeira vez, verifique se o processo já está em execução:

pid=$(cat pid.file)
ps -ef | grep $pid | grep <command to start daemon>
if [[ $? -eq 0 ]]; then
    echo "daemon already running" & exit 1
else
    <command to start daemon> & \
             echo $! > pid.file
fi
    
por 21.06.2015 / 18:14