FreeBSD Watchdog
Toores. Ehk seda pala võib täiendada.
Sissejuhatus
Watchdog on mikrokontrollerites levinud lahendus. Igasugustes väikestes kivides, pultides jms kohtades. Andes nii neile suure töökindluse.
Osad Emaplaadid on samuti varustatud spetsiaalse seadmega mis teeb restardi kui OS pole endast mõni aeg märka andnud. BSD saab läbi kerneli panna tiksuma watchdog countdowni...ehk mahalugemise. Kuni töötab teatud deemon (watchdogd) siis lükkab see deemon iga sekundi järel countdowni nulli. Kui aga masin panges siis jookseb countdown lõpuni ja emaplaat teeb masinale reboodi. Mitte päris täielik lahendus aga asjalik kindlasti.
Raudvaraline valvekoer
Laadime ichwd mooduli. Täpsem nimetus asjal Intel ICH watchdog interrupt timer. NB! Kui emaplaat ei toeta seda lahendust saab kasutada vaid tarkvaralist ehk kernelisse endasse sisseehitatud timerit mis pole kaugeltki sama tõhus.
# kldload ichwd
Väljund
ichwd module loaded ichwd0: <Intel ICH7 watchdog timer> on isa0 ichwd0: Intel ICH7 watchdog timer (ICH7 or equivalent)
/boot/loader.conf fiaili tuleb lisada:
ichwd_load="YES"
Teiseks on vaja lisada faili /etc/rc.conf rida watchdogd startimise kohta:
watchdogd_enable="YES"
Peale järgmist rebooti käivitatakse watchdogd deemon. Deemon käib iga sekund kerneli kaudu emaplaadil asuvat timerit resetimas. Kui tappa protsess tavalisel moel eemaldab see etevaatlikult kivilt timer'i. Kuid kui tappa deemon -9 signaaliga siis timer jääb toimima ja teeb masinale restardi.
Watchdogi saab sundida käivitama spetsiifilisi käske süsteemi kontrolliks, nt
watchdogd_flags="-e /bin/ps"
Või
watchdogd_flags="-e 'ls -al /etc'"
Probleemide korral, ehk kui käsk:
# kldload ichwd
Väljastab:
chwd module loaded ichwd0: <Intel 63XXESB watchdog timer> on isa0 ichwd0: ICH WDT present but disabled in BIOS or hardware device_attach: ichwd0 attach returned 6 ppc0: cannot reserve I/O port range
Siis tuleb bios'ist kõigepealt watchdog lubada.
Tarkvaraline valvekoer
Juhul kui emaplaat ei toeta raudwaralist watchdogi on võimalik kasutada ka tarkvaralist võimalust ehk lisada see kernelisse. Selline lahendus pole küll nii tõhus nagu on riistvaraline aga asi seegi. Kasutamiseks tuleb ehitada kernel võtmega:
options SW_WATCHDOG
Seejärel tuleb käivitada watchdogd deemon nagu ülal kirjeldatud. Kui deemon pole aga 16 sekundit timerit restartinud satub kernel paanikasse, väljastab katkestuste kohta info ja teeb reboodi.
PS: Faili /etc/sysctl.conf oleks soovitatav lisada järgnevad read:
# selleks, et paanika korral tehtaks reboot mitte ei laskutaks debugerisse debug.debugger_on_panic=0 # et paanikas ei proovitaks peale paanikat suurt dump faili kettale kirjutada (mis võib takistada masinal restarti teha) kern.coredump=0