A abordagem mais simples é agendar outro processo para verificar por mais de 24 horas (ou seja: 25h) de tempo de atividade. Se a verificação retornar true, é óbvio que algo deu errado com a reinicialização e, portanto, a máquina deve ser reiniciada por meio de SysRq
.
Para confiabilidade máxima, sua verificação periódica não deve depender de crond
(que pode ser eliminado pelo processo pendente shutdown
). Em vez disso, use um esquema de pesquisa; algo assim:
#!/bin/bash
max_uptime=$((25*3600)) #max 25h
sleep_time=3600 #1h sleeps
while true; do
current_uptime='grep -o "^[[:digit:]]\+" /proc/uptime'
echo "current uptime: $current_uptime seconds"
if [ $current_uptime -gt $max_uptime ]; then
echo "reboot!"
echo 1 > /proc/sys/kernel/sysrq; sync; echo b > /proc/sysrq-trigger
else
echo "not now!"
fi
echo "sleeping..."
sleep $sleep_time
done
Você pode iniciar o script acima com uma entrada @reboot
crond
ou com rc.local
e amigos.