Überprüfen Sie, ob das Python-Skript ausgeführt wird
Ich habe einen python-daemon läuft als Teil meiner web-app/Wie kann ich schnell überprüfen (mit python), wenn mein daemon läuft und wenn nicht, starten Sie es?
Ich möchte es so beheben Sie Abstürze der Dämon, und so das Skript muss nicht manuell ausgeführt werden, es wird automatisch ausgeführt, sobald es aufgerufen wird und dann alles läuft.
Wie kann ich prüfen (mit python), wenn mein Skript ausgeführt wird?
Kommentar zu dem Problem
Sind Sie sicher, dass Sie wan ' T in Ihrem Prozess zu halten Sie Ihre anderen Prozess bis in python geschrieben?
Gehen am Tendo, schafft eine singleton-Instanz des Skripts, daher Skript wird nicht ausgeführt, wenn es bereits ausgeführt wird. github.com/pycontribs/tendo
InformationsquelleAutor der Frage Josh Hunt | 2009-04-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Drop ein pidfile irgendwo (z.B. /tmp). Dann können Sie überprüfen, um zu sehen, ob der Prozess ausgeführt wird überprüfen, um zu sehen, ob die PID in der Datei vorhanden ist. Vergessen Sie nicht, um die Datei zu löschen, wenn Sie sauber heruntergefahren werden, und überprüfen Sie es, wenn Sie starten.
Dann können Sie überprüfen, um zu sehen, ob der Prozess ausgeführt wird überprüfen, um zu sehen, ob der Inhalt von /tmp/mydaemon.pid sind ein bestehender Prozess. Monit (oben erwähnt), kann dies für Sie tun, oder Sie können schreiben, ein einfaches shell-Skript, um zu überprüfen es für Sie mit der return-code von ps.
Für zusätzliche Kredite, die Sie verwenden können, die atexit-Modul, um sicherzustellen, dass Ihr Programm säubert seine PID-Datei unter keinen Umständen (wenn Sie getötet werden, Ausnahmen, etc.).
InformationsquelleAutor der Antwort Dan Udey
Einer Technik, die praktisch auf einem Linux-system ist die Verwendung domain-sockets:
Es ist, Atomare und vermeidet das problem mit lock-Dateien herumliegen, wenn der Prozess gesendet wird ein SIGKILL gesendet
Können Sie Lesen Sie in der Dokumentation für
socket.schließen
, dass die Steckdosen werden automatisch geschlossen, wenn der Müll gesammelt.InformationsquelleAutor der Antwort aychedee
Den pid Bibliothek kann genau das tun.
Wird es automatisch auch den Fall behandeln, wo die PID-Datei existiert, aber der Prozess wird nicht ausgeführt.
InformationsquelleAutor der Antwort Decko
Gibt es sehr gute Pakete für den Neustart von Prozessen auf UNIX. Eine, die hat ein tolles tutorial über den Aufbau und die Konfiguration ist monit. Mit einigen Optimierungen können Sie haben eine solide bewährte Technik halten Sie Ihren daemon.
InformationsquelleAutor der Antwort ojblass
Natürlich das Beispiel von Dan wird nicht so funktionieren, wie es sein sollte.
In der Tat, wenn das Skript zum Absturz, steigen eine Ausnahme, oder nicht sauber pid-Datei, wird das Skript mehrmals ausgeführt werden.
Schlage ich die folgenden basierend auf einer anderen website:
Dies ist zu überprüfen, ob bereits eine lock-Datei vorhandenen
Dies ist Teil des Codes, wo wir eine PID-Datei in die lock-Datei
Dieser code prüft den Wert von pid im Vergleich zu den bisherigen Laufenden Prozess., vermeiden doppelter Ausführung.
Ich hoffe, es wird helfen.
InformationsquelleAutor der Antwort Shylock
Versuchen, diese andere version
InformationsquelleAutor der Antwort debuti
Gibt es eine Vielzahl von Optionen. Eine Methode ist die Verwendung von Systemaufrufen oder python-Bibliotheken, die Durchführung solcher Anrufe für Sie. Der andere ist einfach zu laichen, ein Verfahren, wie:
und analysieren Sie die Ausgabe. Viele Menschen wählen diesen Ansatz, es ist nicht unbedingt ein schlechter Ansatz in meinen Augen.
InformationsquelleAutor der Antwort BobbyShaftoe
Ich bin ein großer fan von Supervisor für die Verwaltung von daemons. Es ist in Python geschrieben, so gibt es viele Beispiele dafür, wie die Interaktion mit oder erweitern von Python. Für Ihre Zwecke die XML-RPC-Prozess-control-API sollte gut funktionieren.
InformationsquelleAutor der Antwort Matt Good
Die anderen Antworten sind ideal für Dinge wie cron-jobs, aber wenn Sie läuft ein daemon, sollten Sie überwachen Sie mit so etwas wie daemontools.
InformationsquelleAutor der Antwort bobpoekert
wenn yor debug-script in pycharm immer verlassen
InformationsquelleAutor der Antwort user3366072
Anstatt die Entwicklung Ihrer eigenen PID-Datei-Lösung (die hat mehr Feinheiten und Ecken Fällen, als Sie vielleicht denken), haben Sie einen Blick auf supervisord -- dies ist ein Prozess-Kontroll-system macht es leicht zu wickeln job-Steuerung und daemon Verhaltensweisen rund um eine vorhandene Python-Skript.
InformationsquelleAutor der Antwort Chris Johnson
versuchen Sie dies:
InformationsquelleAutor der Antwort MrRolling
Hier gibt es noch weitere nützliche code (mit Prüfung ob genau python führt das Skript):
Hier ist string:
gibt 0 zurück, wenn "grep" erfolgreich ist, und der Prozess "python" ist derzeit mit dem Namen des Skripts als parameter .
InformationsquelleAutor der Antwort Dmitry Allyanov
Ein einfaches Beispiel, wenn Sie nur suchen für einen Prozess mit dem Namen vorhanden ist oder nicht:
InformationsquelleAutor der Antwort Tomba
Bin auf diese alte Frage sucht Lösung für mich.
Verwenden psutil:
InformationsquelleAutor der Antwort NST
Meine Lösung ist zu prüfen, für die Prozess-und Befehlszeilen-Argumente
Getestet auf windows und ubuntu linux
InformationsquelleAutor der Antwort kabapy
Betrachten Sie das folgende Beispiel, um Ihr problem zu lösen:
Schlage ich vor, dieses script, weil es sein kann, genau ein mal ausgeführt.
InformationsquelleAutor der Antwort edisonex
Bash verwenden, schauen Sie nach einem Prozess mit den aktuellen Skriptnamen. Keine extra-Datei.
Testen, fügen Sie
InformationsquelleAutor der Antwort Jerome Jaglale