Com um sistema init moderno (como systemd ou upstart), você pode fazer com que o sistema init cuide de reiniciar o script se ele falhar.
Se por algum motivo você estiver preso a um sistema legado, você pode fazer com que o script atualize periodicamente um arquivo de sinalizador ( touch /var/lib/myapp/flagfile
) e, depois, verificar se o arquivo de sinalização é mais antigo que um determinado número de segundos. e reinicie o script, se necessário. Algo como:
# get current time (in seconds since the epoch)
now=$(date +%s)
# get flag file mtime (in seconds since the epoch)
last_update=$(stat --printf '%Y' /var/lib/myapp/flagfile)
if [ $(( now - last_update )) -gt $interval ]; then
restart_script_here
fi
Usando o systemd
Se você tiver o systemd disponível, basta criar um .service. unit with the
Restart = sempre key, which instructs systemd to restart the script whenever it fails. E.g., put something like this in
/ etc / systemd / system / myscript.service ':
[Unit]
Description=This is my nifty service.
# Put any dependencies here
[Service]
Type=simple
ExecStart=/path/to/myscript
Restart=always
[Install]
WantedBy=multi-user.target
E, em seguida, ative-o com:
# systemctl enable myscript
# systemctl start myscript
Usando o cron
Em vez de executar um script persistente, você poderia simplesmente executar uma tarefa cron normal que executaria todas as verificações e remediações necessárias. Você ficaria limitado a verificar uma vez por minuto, mas se essa frequência for aceitável, provavelmente será uma solução mais simples.