Ich gehe ssh
auf einen Server und starte ein Python-Skript, das ca. 24 Stunden zu vervollständigen. Was ist, wenn meine Internetverbindung in der Mitte unterbrochen wird? Wird das den Befehl stoppen?
Gibt es eine Möglichkeit, meinen Befehl mit langer Laufzeit so auszuführen, dass lokale Verbindungsabbrüche ihn nicht beeinträchtigen und ich seine Ausgabe weiterhin sehen kann, nachdem ich mich erneut angemeldet habe ssh
?
screen -r
werden Sie erneut verbunden.Sie können auch verwenden,
disown
wenn Sie den Prozess bereits ohnescreen
oder gestartet habennohup
quelle
Die vorhandenen Antworten können gut funktionieren, aber ich brauchte etwas für BusyBox (eine Shell und eine Reihe von Tools für minimale Hardware wie Heimrouter). Mein System nicht
screen
,dtach
,at
,disown
, oder sogarnohup
! Dank tbc0 auf SO ( Link ) habe ich dieses Juwel gefunden. Es wird sofort zurückgegeben, aber der Serverprozess wird weiterhin ausgeführt:Oder wenn mehrere Befehle benötigt werden:
Erläuterung:
>&-
- Standardgriff schließen2>&-
- stderr schließen<&-
- stdin schließen&
- Prozess in den Hintergrund stellenDies verwendet keine externen Programme und sollte über ksh, ash, Bourne Shell, Bash usw. funktionieren.
quelle
Wenn Sie einen Prozess im Hintergrund ausführen und Ihre Sitzung schließen, wird der Prozess von init (PID 1) übernommen.
Wenn ich eine Sitzung habe und mache:
und öffnen Sie eine andere Sitzung und führen Sie Folgendes aus:
Mein Prozess läuft noch und wir sehen, dass sein übergeordneter Prozess jetzt 1 (init) ist.
Alternativ können Sie Ihr Skript wie einen Daemon einrichten. Eine schnelle Suche zeigt diesen scheinbar nützlichen Link: http://onlamp.com/python/pythoncook2/solution.csp?day=1 . Wenn Sie diesen Ansatz wählen wollten.
quelle