Sziasztok!
Egy Ubuntu LTSP alapú kiosk-ot próbálok beállítani, és a sok-sok kezdeti probléma után a legutóbbira jó lenne egy kis segítség.
A kiosk tulajdonképpen kész, csak a felállás egy kicsit bizonytalan, kb. 10%-ban elakad a boot-kor. Ezen megpróbáltam úgy segíteni, hogy betöltöttem a TCO_wdt modult, és indítom a watchdog daemont.
Egy saját ellenőrző scrip-et hív a watchdog, mivel ha az alapértelmezés szerint töltődik be, akkor a bootba való belefagyás még az indulása előtt történik, korán betöltve pedig nincs kész néhány dolog, amit ellenőriz, így főbe lövi a gépet idő előtt.
Nem igazán látok arra lehetőséget, hogy a kernel modul betöltődésekor élesítsem a watchdog-ot, így ha a watchdog daemon nem indul el akkor hiába van HW watchdog azt nem élesítette senki, így nem lesz újraindítás sem.
A másik, gond pedig az, hogy nem tudom hogyan lehet a daemont lebeszélni a saját újraindítási módszeréről, mert azzal kezdi, hogy lelövi az nbd klienst, vagyis jól kiakasztja magát a HW watchdog pedig majd újraindítja. Igazándiból nem kéne csinálnia semmit, ha minden OK, akkor bizgesse a /dev/watchdog -ot, ha nem ok, akkor pedig hagyja békén.
Az sem egészen világos, hogy a watchdog daemon ellenőrző script példákban, meg a manuálban is hiba esetén -1 ill. -2 a visszatérési érték, amit az sh megreklamál, és 6-al tér vissza, ami gondolom a hibás visszatérési kódot jelzi. Akkor most én nem tudok valamit, vagy a watchdog írója?
- 2213 megtekintés
Hozzászólások
Úgy tűnik, ha azt akarom, hogy a watchdog daemon ne akarjon restartot, hanem csak hard reset legyen, ahhoz az kéne, hogy az ellenőrző ill. a repair script -2 vel térjen vissza. Ha a script fejlécbe "#!/bin/sh" helyett "#!/bin/bash"-t írok, akkor elfogadja a -2, kilépési kódod, de 8 bitre csonkolva az 254-lesz. A watchdog konstatálja is, hogy 254-el tért vissza, és még véletlenül sem nézi -2 -nek.
Szóval valaki árulja el hogyan lehet egy shell script-ből -2 -vel visszatérni?
A HW watchdog élesítése is aránylag egyszerűen megoldható pl. egy "echo '0'>/dev/watchdog" parancsal, ha ezt el tudom helyezni az initrd valamelyik indító scrit-ben, nincs erről valamilyen howto, hogyan kell "szabályosan" csinálni?
- A hozzászóláshoz be kell jelentkezni
Szóval valaki árulja el hogyan lehet egy shell script-ből -2 -vel visszatérni?
Szerintem sehogy, tudtommal a szkript exit statusa 0 es 127 kozott lehet, vagy a shell 128+signum-ot ad vissza, ha egy signal hatasara lepett ki.
szerk:
man 2 wait:
WEXITSTATUS(status)
returns the exit status of the child. This consists of the least significant 8 bits of the status argument that the child specified in a call to exit(3) or _exit(2) or as the argument for a return statement in main(). This macro should only be employed if WIFEXITED returned true.
Ebbol latszik, hogy az exit status mindenkeppen 8 bites, bar nem mondja, hogy elojeles, vagy elojel nelkuli szam, ugy tunik, elojel nelkulikent kezeli.
- A hozzászóláshoz be kell jelentkezni
Ezt én is így tudom. Viszont, ha ez így van, akkor a watchdog daemon írójától az csak egy (rossz) vicc, hogy negatív visszatérési kódokat használ(na). Még példa script is van, ami persze ezek szerint nem véletlenül nem (úgy) működik.
A megoldások:
Meg kell adni egy repair script-et a watchdog.conf-ban, és ha azt szeretnénk, hogy a HW watchdog újraindítsa a gépet, akkor a script-ben kell egy nagy sleep (a daemon is ezt csinálná, ha bárkitől kapna -2 -es exit kódot) és akkor lejár a watcdog óra és a gép újraindul.
A HW watchdog élesítéséhez pedig azt csináltam, hogy egy script-et írtam: /etc/initramfs-tools/scripts/init-top/0watchdog néven:
case $1 in
prereqs)
exit 0
;;
esac
/sbin/modprobe iTCO_wdt heartbeat=120 nowayout=1
echo '0' >/dev/watchdog
Majd "update-initramfs -u". A script jó korán elindul, élesíti az órát, elég nagy idő intervallumra, hogy legyen idő tovább boot-olni. így ha kiakad a boot során, akkor van újraindulás.
Még annyit csináltam, hogy a daemont korábban indítottam, mint az alapértelmezés, és az uptime-tol függően a repair script-ben, ha nem telt el elég idő, akkor 0-val tértem vissza, jelezve, hogy minden rendben, így időt adva arra, hogy minden felálljon.
Ez így nekem működik.
- A hozzászóláshoz be kell jelentkezni
Újra raktam a kiosk gépek szerverét most Ubuntu 12.04-el, és megint eljutottam a watchdog beállításához.
Még mindig ugyanazok a példák vannak a csomagban, vagyis negatív visszatérési értékek.
Ha elindítom pl. a dbcheck.sh -t kapok egy hiba üzenetet: "exit: Illegal number: -2".
Engem baromira idegesít a dolog. Valaki világosítson fel, hogyan lehet olyan scriptet írni, ami negatív értékkel tér vissza. Ha ilyet nem lehet, akkor egy hihető magyarázat kéne arra, hogy a watchdog csomag miért használ negatív értékeket, és miért nem veszi észre senki, hogy ez úgy rossz ahogy van.
- A hozzászóláshoz be kell jelentkezni
Kiprobaltam neked, bash-sel megy, dash-sel nem (Debian Squeeze):
[root@host ~]# bash /usr/share/doc/watchdog/examples/dbcheck.sh host.example.com; echo $?
254
[root@host ~]# dash /usr/share/doc/watchdog/examples/dbcheck.sh host.example.com; echo $?
exit: 29: Illegal number: -2
2
hogyan lehet olyan scriptet írni, ami negatív értékkel tér vissza
Probald ki ugy, hogy a kettes komplemenset adod vissza (-2 helyett 254-et).
- A hozzászóláshoz be kell jelentkezni
Amit te leírsz, az egy hibának a megkerülése, ami vagy működik vagy nem.
Nem arról van szó, hogy nem tudom valahogy kikerülni, ezt az egyenlőre hibásnak tűnő konstrukciót. Hanem arról, hogy értetlenül álok az előtt, hogy ez miért van így. Ez (mármint a watcdog csomag) így teljesen logikátlan, értelmetlen, és ha az eddig leírtak igazak, akkor rossz is. Ha viszont feltételezzük, hogy a watchdog csomaggal kapcsolatba hozható fejlesztők nem hülyék, akkor ebből az következik, hogy én valamit rosszul látok, valamit nem tudok, és ez az ami engem zavar.
- A hozzászóláshoz be kell jelentkezni
Hanem arról, hogy értetlenül álok az előtt, hogy ez miért van így
Mondjuk mert a fejleszto sose probalta bash-en kivul massal?
Ha viszont feltételezzük, hogy a watchdog csomaggal kapcsolatba hozható fejlesztők nem hülyék
Nem ez lenne az elso alkalom, hogy valaki hibat talal egy programban... ;-)
Nezd meg a szabvanyt (SUSv2): "When reporting the exit status with the special parameter ?, the shell will report the full eight bits of exit status available."
Nem mondja ugyan, hogy elojel nelkuli, de nekem az jon le elsore abbol, hogy the full eight bits.
szerk. Az exit parancsnal mar mondja, hogy 0 es 255 kozott lehet az exit status (es a dash ezt komolyan is veszi, azert kapsz hibat). Ird meg a fejlesztonek, hogy WTF.
- A hozzászóláshoz be kell jelentkezni