Umgehen Sie dies, indem Sie das Python-Skript delegieren, um seine eigene Pid-Datei zu schreiben.
nohup auf bash redhat ist eine andere prozessID
387
Allen
Ich verwende capistrano, um einen Python-Dienst bereitzustellen. Ich habe versucht, sowohl den Dienst zu starten als auch eine PID-Datei zu schreiben, sodass ich den Dienst neu starten oder den Dienst später stoppen kann. Das Problem ist, dass die PID-Datei immer eine Prozess-ID hinter sich hat, und ich bin mir nicht sicher, warum. Wenn in der PID-Datei beispielsweise 123 angezeigt wird, ist der derzeit ausgeführte Prozess 124. Soll ich manuell einen hinzufügen? Oder schreibe ich den Befehl falsch? Ich schreibe hier den Befehl psuedo:
nohup python ./service.py special_argument --config /some_folder/devel.yml --log logs/service.log > /dev/null 2>&1& echo $! > /some_folder/pids/special_argument.pidfile
Wenn es sich um einen Dienst handelt, warum ist nohup überhaupt notwendig?
grawity vor 8 Jahren
0
Ihr Service macht wahrscheinlich eine Fork und Exec. Sie erfassen die PID des übergeordneten Prozesses, der beendet wird, aber das verzweigte untergeordnete Element bleibt erhalten.
Karen B vor 8 Jahren
0
vielleicht nicht ganz ein Dienst ... es ist ein langwieriges Skript, das wir ständig aktualisieren. Was Fork und Exec betrifft, glaube ich nicht, da es nur reiner Python ist. Wir verwenden kein Threading. Es ist nur ein separater Prozess. Wir können den Prozess von Hand mit einem Bash-Skript ausführen und es funktioniert gut, aber es wäre besser, wenn wir mit capistrano starten könnten.
Allen vor 8 Jahren
0
Möglicherweise erfassen Sie auch die PID der Shell-Capistrano-Spawns, um ihre Aufgaben auszuführen. Ohne zu wissen, wie Sie den PID (Code?) Erfassen, ist der Rest nur Vermutungen.
Karen B vor 8 Jahren
0
Nur um zu bestätigen, dass Sie das Python-Skript geöffnet haben und sichergestellt haben, dass es nicht Fork heißt, richtig? Python-Skripte können das tun.
Karen B vor 8 Jahren
0
Nein. Es ist ein einzelner Prozess. Wenn Sie mit Fork meinen, dass es os.fork oder etwas anderes verwendet, dann ist es nicht so. Ich konnte das umgehen, indem Python die PID-Datei selbst schrieb.
Allen vor 8 Jahren
0
1 Antwort auf die Frage
0
Allen
Verwandte Probleme
-
1
Pausieren Sie alle Aufgaben außer x CPU-intensiven Aufgaben
-
10
Wie kann ich die Bash-Historie durchsuchen und einen Befehl erneut ausführen?
-
2
Kann die Ausgabe eines Befehls an zwei andere Befehle weitergeleitet werden?
-
8
Benennen Sie eine Gruppe von Dateien mit einem Befehl um
-
1
Perl-Skript, das als root ausgeführt wird, kann keine Root-Dinge ausführen
-
2
Warum aktualisiert sich mein Pfad nicht * jetzt *?
-
5
Wie entferne ich einen symbolischen Link zu einem Verzeichnis?
-
8
Rette mich vor dem Kauderwelsch
-
9
Wie kann ich jeder Zeile einer Textdatei eine Zeilennummer und einen Tabulator voranstellen?
-
1
Wann sollte ich Konfigurationen in .bashrc vs einfügen? .bash_profile?