Automatický restart služby při jejím pádu (Debian, Ubuntu, pidof, cron)
Občas se stane, že je potřeba automaticky kontrolovat, zda určitá důležitá služba běží a pokud ne, tak ji opět automaticky zkusit nastartovat (restartovat). Jednou z možností je použít podobný skript a poté využít cron pro určení času kontroly.
BASH:
-
#!/bin/sh
-
-
SLUZBA=apache2
-
-
if [ "$(pidof $SLUZBA)" ]
-
then
-
echo "Sluzba $SLUZBA na $HOSTNAME bezi s PID $(pidof $SLUZBA)..."
-
else
-
echo "Sluzba $SLUZBA na $HOSTNAME nebezi, zkousim ji nastartovat..."
-
echo "Sluzba $SLUZBA na $HOSTNAME nebezi, zkousim ji nastartovat..." | mail -s "$SLUZBA@$HOSTNAME nebezi" jmeno@domena.cz
-
invoke-rc.d $SLUZBA restart
-
fi
A pomocí příkazu crontab -e vložit tuto definici
BASH:
-
* * * * * /root/bin/check-service.sh> /dev/null
A nyní se již bude každou minutu spouštět test.








19.Srpen 2007 (Neděle) 14:05
Paráda, už to funguje. Snad s cronem nebudu mít problémy
19.Srpen 2007 (Neděle) 13:15
[6] Bitswash se nespouští jako démon (služba), ale je to aplikace.
Zkus místo
invoke-rc.d $SLUZBA restartnapsat toto včetně cesty a na konci s "&":/usr/bin/bitswash&
Už to funguje?
19.Srpen 2007 (Neděle) 12:55
Už to funguje, ale nechce se nic nastartovat ať zkouším cokoliv, tak mi to vždy vypíše:
Sluzba bitswash na nebezi, zkousim ji nastartovat...
invoke-rc.d: unknown initscript, /etc/init.d/bitswash not found.
19.Srpen 2007 (Neděle) 12:35
[5] Aha, tak to ještě musíš nastavit práva na spouštění, bez toho to prostě spustit nepůjde
. Jako root stačí spustit:
#chmod 770 check_service.sh
Nebo na Ubuntu jako normální uživatel ve skupině admin, pokud je vlastníkem uživatel root:
$sudo 770 check_service.sh
Funguje již?
19.Srpen 2007 (Neděle) 10:26
Díky za podrobný návod, ale zasekl jsem se u testu:
# ./check-service.sh
který mi vypíše:
bash: ./check-service.sh: Permission denied
A přitom v domovském adresáři je :-/
18.Srpen 2007 (Sobota) 20:17
Ahoj CrazyDogu,
ten skript se chová tak, že pokud služba neběží, tak to vypíše na konsoli a současně pošle e-mail na adresu, kterou jsi zmínil. Tam jsi dej samozřejmě svoji.
Aby to fungovalo, nainstaluj si třeba postfix (sudo aptitude install postfix), což je smtp server.
Jinak jak bych postupoval:
$ sudo -s
Zde zadáš své heslo a budeš jako root (pokud jsi ve skupině admin). To, že jsi přihlášen v konzoli jako root, poznáš jednoduše tak, že na začátku promptu (příkazové řádky) bude místo "$" znak "#".
Teď vytvoříme v domovském adresáři uživatele root soubor skriptu, který chceme spouštět:
# touch ~/check-service.sh
Teď ho zeditujeme, třeba tak, jak jsi psal ty:
# gedit ~/check-service.sh
Do něj zkopíruj obsah z článku. Pokud nechceš aby odesílal e-maily, tak prostě ten řádek, která obsahuje jmeno@domena.cz vymaž.
Do proměnné SLUZBA= nadefinuj službu, kterou chceš kontrolovat. Například apache2 je webový server Apache, cupsys je tiskový systém, atd.
Nyní je potřeba nastavit práva na spouštění. Jelikož to má význam pouze pro uživatele root, tak pouze pro něj.
# chmod 770 check_service.sh
Teď bych jej zkusil pustit ručně. Spustit službu a spustit skript a pak vypnout službu a poté opět spustit skript, který by měl onu službu nastartovat.
# ./check-service.sh
Teď již zbývá zadat jen do služby cron, aby se spouštěl skript každou minutu.
# crontab -e
Zde přidat řádek
* * * * * /root/check-service.sh
A je to, funguje?
18.Srpen 2007 (Sobota) 12:08
Tak to nechápu. Prosím tě, proč tam je ten email "jmeno@domena.cz"? A jak to aplikují? sudo gedit /bin/sh a tam nakopírují ten horní příklad a co potom? Díky
18.Srpen 2007 (Sobota) 12:02
Velmi užitečný článek a hned ho aplikují. Snad to zvládnu. Moc díky.