Ich habe ein Python-Skript bgservice.py
und ich möchte, dass es ständig läuft, da es Teil des von mir erstellten Webdienstes ist. Wie kann ich es kontinuierlich laufen lassen, auch wenn ich mich über SSH abmelde?
Antworten
Zu viele Anzeigen?Laufen lassen nohup python bgservice.py &
um das Skript dazu zu bringen, das Aufhängungssignal zu ignorieren und weiterzulaufen. Die Ausgabe wird in nohup.out
.
Im Idealfall führen Sie Ihr Skript mit etwas wie supervise
damit es neu gestartet werden kann, wenn es stirbt.
Wenn Sie den Prozess bereits gestartet haben und ihn nicht unter nohup beenden und neu starten wollen, können Sie ihn in den Hintergrund schicken und ihn dann deaktivieren.
Ctrl+Z
(den Prozess anhalten)
bg
(Neustart des Prozesses im Hintergrund
disown %1
(unter der Annahme, dass dies Auftrag Nr. 1 ist, verwenden Sie jobs
zu bestimmen)
Ausführen eines Python-Skripts im Hintergrund
Zunächst müssen Sie eine shebang Zeile im Python-Skript, die wie folgt aussieht:
#!/usr/bin/env python3
Dieser Pfad ist notwendig, wenn Sie mehrere Versionen von Python installiert haben und /usr/bin/env
sorgt dafür, dass der erste Python-Interpreter in Ihrem $$PATH
Umgebungsvariable genommen wird. Sie können den Pfad Ihres Python-Interpreters auch fest einprogrammieren (z.B. #!/usr/bin/python3
), aber dies ist nicht flexibel und nicht auf andere Rechner übertragbar. Als nächstes müssen Sie die Berechtigungen der Datei so einstellen, dass sie ausgeführt werden kann:
chmod +x test.py
Jetzt können Sie das Skript mit nohup die das Auflegesignal ignoriert. Das bedeutet, dass Sie das Terminal schließen können, ohne die Ausführung zu stoppen. Vergessen Sie auch nicht, die &
damit das Skript im Hintergrund läuft:
nohup /path/to/test.py &
Wenn Sie nicht ein shebang
zur Datei hinzufügen, können Sie das Skript stattdessen mit diesem Befehl ausführen:
nohup python /path/to/test.py &
Die Ausgabe wird in der Datei nohup.out
Datei, es sei denn, Sie geben die Ausgabedatei wie hier an:
nohup /path/to/test.py > output.log &
nohup python /path/to/test.py > output.log &
Wenn Sie die Ausgabe des Befehls an eine andere Stelle umgeleitet haben - einschließlich /dev/null
- wird es stattdessen dorthin gebracht.
# doesn't create nohup.out
nohup command >/dev/null 2>&1
Wenn Sie Folgendes verwenden nohup
bedeutet das wahrscheinlich, dass Sie den Befehl im Hintergrund ausführen wollen, indem Sie eine weitere &
am Ende des Ganzen:
# runs in background, still doesn't create nohup.out
nohup command >/dev/null 2>&1 &
Sie finden die process
und seine process ID
mit diesem Befehl:
ps ax | grep test.py
# or
# list of running processes Python
ps -fA | grep python
ps
steht für process status
Wenn Sie die Ausführung stoppen möchten, können Sie töten mit dem Befehl kill:
kill PID
Alternative Antwort: tmux
- ssh auf dem entfernten Rechner
- Typ
tmux
in cmd - starten Sie den gewünschten Prozess innerhalb der
tmux
z.B..python3 main.py
- Verlassen des
tmux
Sitzung vonCtrl+b
puisd
Sie können den entfernten Rechner jetzt sicher verlassen. Wenn Sie zurückkommen, verwenden Sie tmux attach
zum Wiedereintritt tmux
Sitzung.
Wenn Sie mehrere Sitzungen starten wollen, benennen Sie jede Sitzung mit Ctrl+b
puis $
. und geben Sie dann Ihren Sitzungsnamen ein.
zur Auflistung aller verwendeten Sitzungen tmux list-sessions
um eine laufende Sitzung anzuhängen, verwenden Sie tmux attach-session -t <session-name>
.
Sie können auch Folgendes verwenden GNU-Bildschirm die so gut wie jedes Linux/Unix-System haben sollte.
Wenn Sie mit Ubuntu/Debian arbeiten, ist die verbesserte Variante byobu ist auch ganz nett.
- See previous answers
- Weitere Antworten anzeigen