Pred par dnami som zistil ze skoro vsetky moje masiny maju na doske watchdog (konkretne implmentovany cez nejaky Intel 82801 I/O Controller Hub, teda ICH5 a novsych)
No a co je to watchdog a naco sluzi ?
Je to nejaky hardwarovy casovac, ktory po uplynuti urcitej doby restartne masinu, tento casovac pomocou softwaru pravidelne resetujeme.
V pripade ze ho neresetneme do urcitej doby (v pripade vyssie spomenuteho i8xx_tco 30 sekund), tak restartne komp.
Na domacom pc je to v podstate blbost, ale ked mate stroj v serverovni a nahodou zamrzne, tak nemusite volat isp nech ho idu restarnut, stroj sa rebootne sam.
Stroj sa nemusi restartovat iba v pripade uplneho zamrznutia systemu, restartnut sa moze napr. pri zvyseni load averagu nad urcitu hodnotu, pripadne ked dojde pamet atd.
to je uz uloha toho softwaru, ci bude resetovat ten timer, alebo sa rozhodne pre reboot.
Konkretne linuxova implementacia funguje takym sposobom (pre vsetky watchdog drivery), ze software otvori /dev/watchdog a raz za x sekund tam zapise jeden znak (driver v kernely potom vyresetuje casovac)
V pripade ze zavrieme deskriptor, tak sa casovac nevypne, vypne sa iba v pripade ze posledny zapisany znak bude "V" (toto je konkerne i8xx_tco driver, pri ostatnych neviem)
Uplne najjednoduchsuia implementacia toho softu moze vyzerat takto (jedine co robi ze za x sekund posle nejaky znak, ked ho killneme pomocou SIGTERM, tak zapise znak "V" a ukonci sa, teda vypne sa ten casovac a masinu nerebootne), v pripade ze ho killneme pomocou SIGKILL, tak sa sice ukonci, ale stroj sa rebootne (lebo posledny znak nebol "V")
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
int fd;
void sigterm(int i) {
if (write(fd, "V", 1)!=1) {
perror("write");
}
exit (-1);
}
int main(int argc, const char *argv[]) {
fd=open("/dev/watchdog",O_RDWR);
if (fd==-1) {
perror("open(/dev/watchdog)");
exit(1);
}
signal(SIGTERM,&sigterm);
daemon(0,0);
while(1) {
if (write(fd, "\0", 1)!=1) {
perror("write");
}
sleep(5);
}
}
Na tejto adrese ftp://ibiblio.org/pub/Linux/system/daemons/watchdog/ , najdete software ktory toho vie viac (monitorovat load average, teplotu, pingovat ipcky, atd.)
No a ako rozbehat dirver v kernely ?
V pripade ze pouzivate kernel z distribucie, tak by malo stacit modprobe i8xx_tco, v pripade ze si kompilujete sami kernel, tak toto nastavenie najdete
pod device drivers->character devices->watchdog cards
Kernel po naloadovani tohto modulu alebo nabootovani by mal vypisat
i8xx TCO timer: initialized (0x0860). heartbeat=30 sec (nowayout=0)
Len na niektorych zakladnych doskach ale tento watchdog nefunguje a vypise "failed to reset NO_REBOOT flag, reboot disabled by hardware"
Potom jedine zostava kupit daku watchdog pci kartu, alebo pouzit softwarovy watchdog, ale ten nie je na 100% uspesny :)
Ja pouzivam okrem sw watchdoga aj taketo nieco ipt_SYSRQ
, vcelku sikovny modul do iptables :)
parada, to vyzera zaujimavo
a aj to funguje :) ale jedina podmienka je, aby kernel zil:-), ked aj ten skape tak to je v prdeli :)))
hmm zajimave asi do toho pujdu :)
ono hlavne ide o to ze normalne nemas vzdy po ruke cloveka
ktory sedi pri servery 24 hodin a caka kym mu zavolas aby ho restartol, niektore serverhousingy funguju takym sposobom ze nemaju ani v zmluve restart do urciteho casu
a par krat sa mi stalo ze bolo treba cakat vyse hodinu ked to bolo surne
samozrejme ze to co si spomenul sa neda riesit tak ze mam f pici a necham server restartovat ked sa nieco dojebe, v podstate tu ide iba o restart masiny v tom najhorsom ked vsetko krachne, neda sa prihlasit ani cez ssh a tak
co sposobilo potom problem je na adminovy aby poriesil tak aby sa to neopakovalo
nedostatok memory vie vyriesit aj kernel sam, ze bude zabijat procesy, uz som zazil taku vec:-), dokonca aj load cca 600-700 a tam pomohol len reboot...
a take ako limity na na userov?:-)