162 Stimmen

Wie kann ich ein Skript im Hintergrund laufen lassen, auch wenn ich mich über SSH abmelde?

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?

282voto

Edward Dale Punkte 28689

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.

44voto

Cooper Punkte 1147

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)

37voto

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

19voto

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 von Ctrl+b puis d

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

17voto

Dirk Eddelbuettel Punkte 345316

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X