Einfacher Apache-Webserver Watchdog

In unregelmäßigen Abständen innerhalb der letzten drei Monaten hat sich mein Apache2 Webserver einfach abgeschaltet. Es ist in etwa ein Mal im Monat vorgekommen. Natürlich immer dann, wenn ich gerade nicht vor Ort war und den Fehler direkt beheben konnte. Anhand der Log-Dateien konnte ich auch nichts auffälliges feststellen und eine tiefergehende Fehlersuche angehen. Daher habe ich nicht die Ursache, sondern das Symptom bekämpft. Ich habe mit einer Zeile Code einen simplen, aber effektiven Watchdog für den Webserver gebaut. So geht’s auf einem Ubuntu Linux-System:

if ! pgrep apache2 -c >/dev/null; then service apache2 start; fi

Diese Zeile macht eigentlich nichts anderes als herauszufinden, ob ein apache2 Webserver auf dem Linux-System läuft pgrep apache2 -c. Falls nicht if ! ...; then ... ; fi wird einfach mit service apache2 start der Webserver wieder gestartet.

Um das zu automatisieren editiert man als superuser mit sudo crontab -e die Superuser Cron-Tabelle. Bitte achtet darauf, dass ihr in der Cron-Tabelle den komplette Pfad zu den genutzen Programmen pgrep und service angebt, sonst klappt es nicht. Der Watchdog wird nach dem Speichern einmal pro Minute ausgeführt, längere Zeitintervalle sind natürlich möglich:


* * * * * if ! /usr/bin/pgrep apache2 -c >/dev/null; then /usr/sbin/service apache2 start; fi >/dev/null 2>&1

Kontrollieren ob der cronjob richtig läuft kann man mit cat /var/log/syslog. Diesen simplen Watchdog kann man prinzipiell auch mit allen anderen Diensten nutzen. Im schlimmsten Fall seid ihr in dieser Konfiguration 59 Sekunden „offline“. Das Vorgehen funktioniert natürlich nicht, wenn der Dienst aufgrund einer Fehlkonfiguration unmittelbar nach dem Start abstürzt. Wenn es aber nur sporadisch mal nicht funktioniert, ist diese Lösung schnell umgesetzt und effektiv.

3 comments on “Einfacher Apache-Webserver Watchdog”

  1. Ulrich Ivens

    Hallo Günter,

    nein, leider habe keine Idee. Ich habe aber gesehen, dass du die Lösung gefunden hast. In deinem nächsten Post beschreibst du das ja. Danke, dass du deine Lösung mit meinen Blog-Lesern teilst!

    Gruß
    Ulli

  2. Günter

    Damit klappt’s:

    * * * * * xx=$(/usr/sbin/service apache2 status | grep „active (running)“); if [ -z „$xx“ ] ; then echo $(date) „apache restarted“ >> /var/log/apache2/resinfo.log ; /usr/sbin/service apache2 start ; fi

  3. Günter

    Ich habe auf meinem Server mehrere Linux-Container (lxc) laufen, in denen auch apache läuft. Das Problem ist jetzt, dass nach dem Absturz von apache mittels pgrep immer noch die apache Prozesse in den Containern da sind und damit der Watchdog nicht funktioniert. Hast Du eine Idee, wie man die Prozesse in den lxc-Containern ignoriert?

Leave A Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.