Remote-Code-Ausführung nach dem Neustart von tmux

433
MichaelSB

Ich habe darüber gelesen tmux-resurrect, aber mir ist immer noch nicht klar, ob ich Folgendes tun kann:

  1. tmuxSitzung starten
  2. ssh zum Remote-Server
  3. lang laufenden Code auf dem Remote-Host starten
  4. tmux-Server beenden (z. B. Neustart des lokalen Computers)
  5. tmux-Sitzung wiederherstellen und erneut anordnen (z. B. mit tmux-resurrect)
  6. Überwachen Sie weiterhin den Code, den ich auf dem Remote-Server gestartet habe

Muss ich nohupin Schritt 3 verwenden? oder kann tmux-resurrect(oder ein anderes Werkzeug) sich darum kümmern?

3

1 Antwort auf die Frage

2
Kamil Maciorowski

Kein lokales Werkzeug kann dies aufgrund dessen, was der Server "sieht":

  • Wenn Sie die SSH-Verbindung ordnungsgemäß trennen, wird der Server dies sofort feststellen.
  • Wenn Sie einfach verschwinden (z. B. durch einen harten Reset), bleibt die Verbindung auf der Serverseite bis zu einem Timeout offen ( ClientAlive*Optionen vergleichen, TCP-Keepalive-Konzept - Einzelheiten finden Sie in dieser Antwort ).

Selbst wenn Sie beabsichtigen, ein tmux-resurrectanderes Tool auf der lokalen Seite zu verwenden, weiß der Server dies nicht, es ist ihm egal. Es wird Ihren lang laufenden Code beenden, es sei denn, Sie verwenden nohupoder besser…

Wenn möglich, verwenden Sie tmux(oder screen) auf dem Server :

  1. tmuxSitzung auf dem Client nicht betreten .
  2. ssh zum Server.
  3. tmuxSitzung auf dem Server starten
  4. Starten Sie dort lang laufenden Code.
  5. Trennen Sie die Verbindung trotzdem: elegant oder nicht, mit oder ohne Entfernung von der Fernbedienung tmux.
  6. ssh nochmal.
  7. Ihre tmuxSitzung ist immer noch vorhanden (es sei denn, dem Server ist in der Zwischenzeit etwas Schlimmes passiert). wieder anbringen mit tmux a.

Ich benutze tmuxdiesen Weg täglich und denke, dass dies der richtige Weg ist. Auf meinem Laptop tmuxdauert die Sitzung höchstens einige Stunden. Ich schalte ihn jeden Abend aus. Ich habe jedoch Zugriff auf einige Server, auf denen meine tmuxSitzungen monatelang laufen. Wenn ich dies schreibe, watch df -hläuft bei einem von ihnen der Prozess wörtlich für eine Woche in einer tmuxSitzung, die wie vor zwei Monaten begonnen hat.

Wow, das ist genial und im Rückblick so offensichtlich :) MichaelSB vor 6 Jahren 0