2012-05-18 7 views
5

Wie sollte ich Daemontools Supervisor Skript?Wie überwache ich einen Webserver mit Daemontools?

Ich habe begonnen, D. J. Bernsteins Daemontools zu verwenden, um einige Prozesse am Laufen zu halten und funktioniert gut. Aber jetzt muss ich ein paar zusätzliche Bedingungen in diesen Prozessen überwachen und habe keine guten Informationen dazu gefunden.

Mein Szenario ist, dass ich einige Prozesse für eine Web-App (Pharo Smalltalk virtuelle Maschinen) laufen haben und sie http antworten, jeder in ihrem Port (das ist für die für Loadbalance). Ich möchte sie irgendwie pingen, um zu überprüfen, dass sie nicht nur laufen, sondern auch auf HTTP-Anfragen reagieren. Wenn sie auf eine Anforderung für mehr als 30 Sekunden nicht in einer bestimmten Weise reagieren, sollten sie als abgestürzt behandelt und einfach neu gestartet werden.

Ist das überhaupt möglich mit daemontools? Wenn ja, wie soll ich dieses Skript schreiben und wo sollte ich es platzieren? oder wo ist die Dokumentation dazu?

Antwort

6

Die einfachste Lösung besteht darin, einen weiteren Daemontool-Task mit einem Skript zu erstellen, das 30 Sekunden lang ruht und dann das Vorhandensein des Dienstes testet (z. B. wget oder curl). Wenn der Dienst nicht rechtzeitig antwortet, können Sie den Dienst neu starten (svc -t yourapp) und/oder eine Benachrichtigung senden. Der Run-Skript des neuen Dienstes könnte so einfach wie folgt aussehen:

#!/bin/sh 
sleep 30 
if ! wget --quiet --timeout=5 --delete-after "http://yourapp.com/" ; then 
    svc -t /etc/service/yourapp 
fi 

Ich habe auch gute Erfahrungen mit Tools wie Munin gemacht. Auch hier müssen Sie ein Skript zur Verfügung stellen, das Informationen über den Zustand Ihres Bildes liefert. Wenn Sie Ihre Bilder mit einem REST-Service einrichten, können Sie sogar wirklich interessante Metriken wie aktive Sitzungen, inaktive Sitzung, GC-Parameter, Speicherverbrauch, Datenbankstatistiken usw. bereitstellen. Das Tool zeichnet dann im Zeitverlauf schöne Grafiken und lässt Sie Grenzen festlegen benachrichtigt werden, wenn sich die Dinge schlecht verhalten.

+0

Danke. Aber gibt es keine Möglichkeit, dies im Vorgesetzten selbst zu tun? – pauel

+0

Ja, siehe den ersten Abschnitt meiner Antwort. –

+0

Ja, ich habe das verstanden. Ich dachte nur, dass der Supervisor, der den Daemon ausführt, dies in irgendeiner Weise tun kann. Wie auch immer, deine Lösung hilft mir sehr. Vielen Dank – pauel

3

Um festzustellen, ob der Dienst reagiert, Sie curl (eine perfekte Passform für HTTP und Befehlszeilen/Shell-Skripten)

curl --connect-timeout 10 http://8.8.8.8 
curl: (28) connect() timed out! 

und Sie komplexere Dinge verwenden können, wie die Überprüfung, dass die Antwort kann schreiben ist 200 (OK) usw.