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:
  1. #!/bin/sh
  2.  
  3. SLUZBA=apache2
  4.  
  5. if [ "$(pidof $SLUZBA)" ]
  6. then
  7.     echo "Sluzba $SLUZBA na $HOSTNAME bezi s PID $(pidof $SLUZBA)..."
  8. else
  9.     echo "Sluzba $SLUZBA na $HOSTNAME nebezi, zkousim ji nastartovat..."
  10.     echo "Sluzba $SLUZBA na $HOSTNAME nebezi, zkousim ji nastartovat..." | mail -s "$SLUZBA@$HOSTNAME nebezi" jmeno@domena.cz
  11.      invoke-rc.d $SLUZBA restart
  12. fi

A pomocí příkazu crontab -e vložit tuto definici

BASH:
  1. * * * * * /root/bin/check-service.sh> /dev/null

A nyní se již bude každou minutu spouštět test. :-)

Slabé...Jde to...Pěkné...Perfektní...Excelentní... (hlasováno 1x, průměr: 5,00 z max. 5)
Loading ... Loading ...
Obdobné články:

Více komentářů (8) na “Automatický restart služby při jejím pádu (Debian, Ubuntu, pidof, cron)”

  1. CrazyDog
    19.Srpen 2007 (Neděle) 14:05
    8

    Paráda, už to funguje. Snad s cronem nebudu mít problémy :)

  2. Pavel Chovančík
    19.Srpen 2007 (Neděle) 13:15
    7

    [6] Bitswash se nespouští jako démon (služba), ale je to aplikace.

    Zkus místo invoke-rc.d $SLUZBA restart napsat toto včetně cesty a na konci s "&":

    /usr/bin/bitswash&

    Už to funguje? :-)

  3. CrazyDog
    19.Srpen 2007 (Neděle) 12:55
    6

    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.

  4. Pavel Chovančík
    19.Srpen 2007 (Neděle) 12:35
    5

    [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ž? :-)

  5. CrazyDog
    19.Srpen 2007 (Neděle) 10:26
    4

    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 :-/

  6. Pavel Chovančík
    18.Srpen 2007 (Sobota) 20:17
    3

    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?

  7. CrazyDog
    18.Srpen 2007 (Sobota) 12:08
    2

    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

  8. CrazyDog
    18.Srpen 2007 (Sobota) 12:02
    1

    Velmi užitečný článek a hned ho aplikují. Snad to zvládnu. Moc díky.

Zanechte, prosím, komentář

XHTML: Můžete použít tyto značky: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>