2010-08-01 6 views
6

Ich möchte einen Python-Prozess dämonisieren und möchte nun fragen, ob es gut ist, einen Daemon laufen zu lassen, wie ein Elternprozess und eine andere Klasse aufrufen, die 10-30 Threads öffnet.Python daemonize

Ich plane ein Überwachungs-Skript für eine Gruppe von Servern zu schreiben und möchte jeden Server alle 5 Minuten überprüfen, dass jeder Server genau 5 Minuten überprüft wird. (Art sprechen, ps auxf Stil Ausgabe)

Ich möchte es auf diese Weise haben:

|monitor-daemon.py 
\-check-server.py 
\-check-server.py 

....

Thank you!

Antwort

1

verwenden Sie supervisord dafür verwenden können. Sie können Aufgaben so konfigurieren, dass sie auf Ereignisse reagieren. Die Ereignisse können manuell oder automatisch durch Überwachung von Prozessen oder auf Basis regelmäßiger Intervalle erstellt werden.

Es ist vollständig anpassbar und in Python geschrieben.

Beispiel:

[program:your_daemon_name] 
command=your_daemon_process 
# Add extra options here according to the manual... 

[eventlistener:your_monitor_name] 
command=your_monitor_process 
events=PROCESS_STATE_RUNNING # Will be triggered after a program changes from starting to running 
# Add extra options here according to the manual... 

Oder wenn Sie wollen, dass die Eventlistener an den Prozess-Ausgang verwenden, um die Veranstaltung PROCESS_COMMUNICATION_STDOUT oder TICK_60 für einen Scheck in jeder Minute zu reagieren. Die Protokolle können in Dateien umgeleitet werden, sodass Sie den Status jederzeit anzeigen können.

+0

Danke, aber das sieht für mich nach einem Overkill aus (in diesem Moment) - wenn du irgendeinen Vorschlag für folgendes hast: (tut mir leid wenn ich mich wiederhole) - Daemon wird gestartet, prüft ob alles in Ordnung ist - Anrufe (Beispiel) MyMonitor() check() -. MyMonitor.check() Aufgaben hat - erhält Daten von einem DB (SQLite/MySQL) - übergibt Daten und offene Themen für jede Dateneingabe - basierend auf dem gibt weitere Aktionen aus (fehlgeschlagener Port - Email senden) - schließt erstellt Threads Sorry für so n00bish Stil, aber wollen überprüfen, ob alles vorhanden ist, bevor Sie zusätzliche Module verwenden. – abiko

+0

Ich habe ein Beispiel abiko hinzugefügt, vielleicht wird das helfen. Sehen Sie sich die Dokumentation für einen Beispiel-Event-Listener an: http://supervisord.org/events.html#example-event-listener-implementation – Wolph

+0

Ja, Supervisord ist übertrieben und übermäßig komplex. Sie sind besser dran mit http://pypi.python.org/pypi/python-daemon, wie in einer alternativen Antwort vorgeschlagen. – aculich

8
+0

Ja, benutze python-daemon statt supervisord! Python-Daemon implementiert die "brave" -Daemon-Spezifikation von PEP 3143, "Standard-Daemon-Prozess-Bibliothek": http://www.python.org/dev/peps/pep-3143/ – aculich

+0

Sie können immer noch Supervisor mit einem Python-Daemon verwenden ;-) – Stefano

-1

Es gibt wirklich nicht viel Ihre eigene daemonize Funktion zu erstellen: Die Quelle für erweiterte Programmierung in der Unix-Umgebung (2. Auflage) ist frei verfügbar: http://www.apuebook.com/src.tar.gz - Sie sind für die apue.2e/daemons/init.c Datei suchen.

Es gibt eine small helper program, die die ganze Arbeit des Erstellens eines passenden Daemons erledigt, sie kann benutzt werden, um willkürliche Programme einzupacken; Dies könnte einige Mühe sparen.