Se a sua máquina não vem acompanhada de um watchdog de hardware, ainda existem vários mecanismos de kernel baseados em software, que podem funcionar para você. Primeiro de tudo, há uma implementação de watchdog de software chamada softdog
, que pode ser usada com watchdog
como um watchdog de hardware real. Você pode testar se seu kernel suporta um watchdog de software testando se modprobe softdog
carrega o módulo do kernel. Isso também lhe daria /dev/watchdog
. Se o seu kernel não oferece suporte para softdog
você teria que construir seu próprio kernel e ativar CONFIG_SOFT_WATCHDOG
:
config SOFT_WATCHDOG
tristate "Software watchdog"
select WATCHDOG_CORE
help
A software monitoring watchdog. This will fail to reboot your system
from some situations that the hardware watchdog will recover
from. Equally it's a lot cheaper to install.
To compile this driver as a module, choose M here: the
module will be called softdog.
Um outro mecanismo fornecido pelo kernel é o Hangcheck Timer , ativado pela opção CONFIG_HANGCHECK_TIMER
:
config HANGCHECK_TIMER
tristate "Hangcheck timer"
depends on X86 || IA64 || PPC64 || S390
help
The hangcheck-timer module detects when the system has gone
out to lunch past a certain margin. It can reboot the system
or merely print a warning.
Também (pelo menos em x86) existe o NMI Lockup Detector como um terceiro mecanismo para reinicializar automaticamente o seu sistema em travamentos:
config LOCKUP_DETECTOR
bool "Detect Hard and Soft Lockups"
depends on DEBUG_KERNEL && !S390
help
Say Y here to enable the kernel to act as a watchdog to detect
hard and soft lockups.
Softlockups are bugs that cause the kernel to loop in kernel
mode for more than 20 seconds, without giving other tasks a
chance to run. The current stack trace is displayed upon
detection and the system will stay locked up.
Hardlockups are bugs that cause the CPU to loop in kernel mode
for more than 10 seconds, without letting other interrupts have a
chance to run. The current stack trace is displayed upon detection
and the system will stay locked up.
The overhead should be minimal. A periodic hrtimer runs to
generate interrupts and kick the watchdog task every 4 seconds.
An NMI is generated every 10 seconds or so to check for hardlockups.
The frequency of hrtimer and NMI events and the soft and hard lockup
thresholds can be controlled through the sysctl watchdog_thresh.
config HARDLOCKUP_DETECTOR
def_bool y
depends on LOCKUP_DETECTOR && !HAVE_NMI_WATCHDOG
depends on PERF_EVENTS && HAVE_PERF_EVENTS_NMI
Não se assuste com a dependência de DEBUG_KERNEL
, pois isso é possível na maioria dos kernels de distribuição.
Observação: Como tudo isso é um mecanismo de software, não há garantia de que eles detectarão travamentos de todos . Como o texto de ajuda para SOFT_WATCHDOG
já menciona, há situações em que todos não serão recuperados. Mas a reinicialização em muitas situações é, no mínimo, melhor do que pendurar todas delas. ;)