Wie kann ich mich wieder an eine getrennte Mosh-Sitzung anschließen oder auf andere Weise loswerden?
Mosh: You have a detached Mosh session on this server (mosh [XXXX]).
dh was ist das Mosh-Äquivalent von
screen -D -R
oder möglicherweise
screen -wipe
Wo ist diese Antwort in der Dokumentation zu finden?
killall mosh-server
tun? Zumal Pidof und Killall sowieso wirklich dasselbe sind.killall
wird genau das getan , was es sagt.killall mosh-server
Sie getrennt.kill `pidof mosh-server`
Sie trotzdem getrenntZu meinem Erstaunen habe ich CRIU ( https://criu.org ) verwendet, um einen Mosh-Client zu überprüfen und neu zu starten, und es hat funktioniert.
Schockierend.
Finden Sie die PID Ihres Mosh-Clients:
Installieren Sie dann CRIU gemäß den Anweisungen.
Dann überprüfen Sie es wie folgt:
Stellen Sie es dann wieder her:
Und da ist es. Ihr Mosh-Client ist zurück.
Beachten Sie jedoch, dass mosh beim Neustart Ihres Laptops (vor dem wir uns schützen wollen) eine
monotonic
Uhr verwendet, um die Zeit auf der Clientseite zu verfolgen, was bei Neustarts nicht funktioniert. Dies funktioniert jedoch NICHT, wenn Ihr Laptop einfach nur abstürzt, funktioniert es nicht, da die Mosh-Sequenznummern nicht mit der Version synchronisiert sind, auf die geprüft wurde (die Binärdatei wird fortgesetzt, die Kommunikation wird jedoch gestoppt).Um dies zu beheben, müssen Sie mosh anweisen, dies zu beenden und den mosh-Quellcode herunterzuladen. Bearbeiten Sie dann diese Datei:
Suchen Sie dann nach
GETTIME
dieser Zeile und kommentieren Sie sie aus.Dann mach:
Danach überleben Ihre CRIU-Checkpoint-Mosh-Client-Sitzungen Neustarts.
(Natürlich müssten Sie etwas schreiben, um die Checkpoints regelmäßig genug durchzuführen, um nützlich zu sein. Aber das ist eine Übung für den Leser).
quelle
Mir ist klar, dass dies ein alter Beitrag ist, aber es gibt eine sehr einfache Lösung dafür, wie von Keith Winstein, Mosh-Autor, hier vorgeschlagen: https://github.com/mobile-shell/mosh/issues/394
Szenario: Ich bin über mosh bei einem Remote-Server angemeldet. Ich habe dann screen ausgeführt und einen Prozess in der Bildschirmsitzung ausgeführt, z. B. htop. Ich verliere die Verbindung (der Akku des Laptops ist leer, die Netzwerkverbindung ist verloren gegangen usw.). Ich verbinde mich wieder über mosh und erhalte diese Nachricht auf dem Server.
Alles was ich tun muss, ist die vorherige Mosh-Sitzung zu beenden
und erneut mit der Bildschirmsitzung verbinden, die noch vorhanden ist .
Jetzt ist htop (oder welcher Prozess auch immer ausgeführt wurde) wieder so, wie es ohne Unterbrechung war. Dies ist besonders nützlich, um Upgrades oder andere Prozesse auszuführen, die den Server in einem unordentlichen, unbekannten Zustand belassen würden, wenn er plötzlich unterbrochen würde. Ich gehe davon aus, dass Sie dasselbe mit tmux tun können, obwohl ich es nicht ausprobiert habe. Ich glaube, das haben Annihilannic und eskhool vorgeschlagen.
quelle
Als Ergänzung zu Vartas Antwort verwende ich den folgenden Befehl, um alle Mosh-Verbindungen außer der aktuellen zu schließen:
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) | xargs kill
quelle
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) && xargs kill || echo "no active sessions to kill"
Wie @varta betonte, sind die Mosh-Besitzer aus Sicherheitsgründen sehr dagegen, von verschiedenen Clients erneut eine Verbindung herzustellen. Wenn Ihr Client nicht mehr verfügbar ist (z. B. wenn Sie Ihren Laptop neu gestartet haben), können Sie die Sitzungen nur beenden.
Um nur getrennte Sitzungen zu beenden, können Sie die folgende Zeile verwenden (die ich als Alias in meinem habe
.bashrc
).Dieser Befehl hängt von der Tatsache ab, dass
who
verbundene Benutzer einschließlich Mosh-Sitzungen aufgelistet werden, nur angehängte Mosh-Sitzungen "via mosh" haben und dass MID-Sitzungen ihre PID in eckigen Klammern haben. Es findet also die Pids nur für die getrennten Mosh-Sitzungen und übergibt sie, um sie mit xargs zu töten.Hier ist ein Beispielergebnis
who
als Referenz:Eine Alternative ist die Verwendung der Umgebungsvariablen mosh-server
MOSH_SERVER_SIGNAL_TMOUT
. Sie können es.bashrc
auf der Serverseite auf etwa 300 einstellen . Wenn Sie dies tunpkill -SIGUSER1 mosh-server
, werden nur Mosh-Server getötet, die in den letzten 300 Sekunden nicht verbunden wurden (die anderen ignorieren den SIGUSER1). Weitere Informationen finden Sie in der Manpage zu mosh-server . Ich verwende den obigen Befehl, weil er mir nach dem Aliasing einfacher erscheint.Beachten Sie, wie von @Annihilannic erwähnt, dass diese tmux / screen-Sitzungen nach dem Beenden der Mosh-Sitzungen immer noch verfügbar sind, wenn Sie tmux / screen in Ihren Mosh-Sitzungen verwenden. Sie können sich also immer noch an sie binden (damit Sie wirklich nicht viel verlieren, wenn Sie die Mosh-Sitzungen selbst beenden).
quelle
Die Antworten hier, in denen behauptet wird, dass das Töten
mosh-server
die einzige Option ist, sind weitgehend veraltet, da wir willkürliche Prozesse verwendencriu
undreptyr
wiederherstellen können.Ganz zu schweigen davon, dass wir heutzutage
kill -USR1 mosh-server
nur getrennte Sitzungen auf saubere und sichere Weise beenden können, ohne auf unsicherewho
Ausgaben oder umständliche Befehle zurückgreifen zu müssen , um zu vermeiden, dass unsere eigene Sitzung beendet wird.Neben der
criu
Antwort von Michael R. Hines gibt es das etwas "leichtere", mitreptyr
dem Prozesse, die vonmosh-server
(dh nicht von sichmosh-server
selbst) gestartet wurden, wieder verbunden werden können . Ich benutze normalerweiseum den Prozessbaum unter dem getrennten Mosh-Server aufzulisten, und dann
um den gewünschten Prozess wieder an mein aktuelles Terminal anzuschließen. Nachdem ich den Vorgang für alle Prozesse wiederholt habe, die mir wichtig sind, habe ich
Ich achte darauf, nur Sitzungen zu beenden, von denen ich weiß, dass sie mir gehören (gemeinsames System).
quelle
Unable to attach to pid 10103: Permission denied
Verwenden Sie den Befehl ps , um die Liste der ausgeführten Aufgaben abzurufen, oder verwenden Sie ps -ef | grep mosh
Töte die Mosh PID mit diesem Befehl:
Um alle Mosh-Verbindungen zu schließen, können Sie:
Beachten Sie, dass Sie auch dadurch getrennt werden, wenn Sie derzeit über mosh verbunden sind
quelle