
Ich habe 2 Hosts, die ich über SSH verbinden kann. Bei einem Host erhalte ich nach einer Weile den Fehler. Write Failed: broken pipe.
Bei dem anderen Host erhalte ich diesen Fehler nicht.
Ich verstehe nicht, warum dieses Problem bei einem Host auftritt, bei einem anderen Host aber alles in Ordnung ist.
Also habe ich eine SSH-Verbindung mit tmux hergestellt und im Remote-Host einen Vordergrundprozess (celeryd) ausgeführt. Aber selbst wenn die SSH-Sitzung fehlschlägt und ich die Verbindung zur unterbrochenen Sitzung wiederherstelle, ist der Vordergrundprozess beendet.
Ich möchte, dass der Vordergrundprozess nicht beendet wird, wenn die SSH-Verbindung unterbrochen wird. Ich habe also nur zwei Lösungen:
- wissen, wie man SSH-Unterbrechungsleitungen vermeidet, oder
- wissen, wie man verhindert, dass der Prozess beendet wird, wenn die SSH-Verbindung unterbrochen wird.
Kann mir jemand dabei helfen?
Antwort1
Ich weiß nicht, was mit deiner SSH-Verbindung passiert, aber wahrscheinlich liegt es an einer schlechten Netzwerkverbindung? Du kannst es mit versuchenMOSH, was robuster ist als eine normale SSH-Verbindung. Insbesondere, wenn das Netzwerk das Problem ist.
Wenn Sie die Verbindung nicht reparieren können, können Sie versuchen, nohup
vor Ihrem Befehl oder einfach zu verwenden nohup tmux
und prüfen, ob sich dadurch etwas ändert.
nohup - führt einen Befehl aus, der gegen Auflegen immun ist und dessen Ausgabe auf einem Nicht-TTY erfolgt
ZUSAMMENFASSUNG
nohup BEFEHL [ARG]...
nohup OPTION
Antwort2
Ich bin nur ein paar Mal auf dieses Problem gestoßen. Bei mir war die Ursache für die unterbrochene Leitung eine fehlende Route. Es trat nur auf, wenn eine Verbindung von einer physischen Maschine im Hauptnetzwerk zu einer VM in einem anderen Netzwerk hinter einem Nat hergestellt wurde.
Ich würde nach Netzwerkproblemen suchen, um zu sehen, ob Sie die unterbrochenen Leitungen schon im Vorfeld verhindern können.
Wenn Sie die Ursache des Problems nicht finden können, können Sie etwas wie screen oder tmux verwenden, um ein Terminal geöffnet zu halten, auch wenn Sie getrennt sind. Anschließend können Sie die Verbindung wiederherstellen und eine Verbindung zur screen- oder tmux-Sitzung herstellen, und Ihr Prozess wird weiterhin ausgeführt und aktiv sein.
Antwort3
Die häufigste Ursache für SSH-Verbindungsabbrüche waren bei mir fehlende Keep-Alives. Das lässt sich im SSH-Client einstellen. Bei SSH wäre das „-oTCPKeepAlives=yes“
in Bezug auf Programme, die nach dem Schließen von SSH ausgeführt werden: Wenn Sie ein Programm in der Shell ausführen, ist es ein untergeordneter Prozess der Shell-Instanz. Sobald es geschlossen wird, werden auch die untergeordneten Prozesse geschlossen. Sie können versuchen, Ihr Programm mit einem & am Ende auszuführen, wodurch ein anderer Prozess gestartet wird. Ich habe gerade einen kurzen Test durchgeführt und der Prozess scheint fortgesetzt zu werden, nachdem die SSH-Verbindung getrennt wurde.