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 
0
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

Umgehen Sie dies, indem Sie das Python-Skript delegieren, um seine eigene Pid-Datei zu schreiben.