Outra solução não tão elegante:
#!/bin/bash
threshold=2
program=""
while true; do
start=$(date +%s)
"$program"
ret_val=$?
stop=$(date +%s)
if [[ ret_val -eq 0 ]]; then
# normal exit, quit
exit 0
else
# abnormal exit, check runtime. if < threshold quit
runtime=$((stop - start))
if [[ runtime -lt $threshold ]]; then
echo "crash on start"
exit 1
fi
fi
done
Isto irá reiniciar, se o programa (primeiro argumento) sair com um código de retorno! = 0 e executar pelo menos limite segundos.
Eu tentei criar um trabalho Upstart usando as opções respawn e respawn limit , mas isso de alguma forma falhou.