Es kann keine erneute Verbindung zu einer Bildschirmsitzung hergestellt werden, nachdem die SSH-Verbindung getrennt wurde


16

Ich habe mich zuvor wieder mit einer lang laufenden Bildschirmsitzung verbunden screen -dr control. Manchmal wird dieser Befehl jedoch nicht wieder mit dem Bildschirm verbunden und bleibt für immer hängen (mehr als 10 Minuten, danach habe ich abgebrochen). Dies geschieht nur, wenn die SSH-Verbindung unerwartet getrennt wird und nicht, wenn der Bildschirm ordnungsgemäß getrennt ist Ctrl-A d. Andere Schalter, wie zB screen -xoder screen -D -RRauch nicht funktionieren.

In diesem Beitrag wird vorgeschlagen , den PTY zu beenden, der die Bildschirmsitzung enthält, wodurch die Trennung des Bildschirms abgeschlossen wird. Es tötet jedoch einfach die Shell, von der screen -dr controlaufgerufen wurde.

Beispielsweise:

$ ps -ef | grep control | grep -v grep
nomad     7387  7109  0 13:05 pts/50   00:00:00 screen -dr control
nomad    15299     1  0 Nov27 ?        00:13:47 SCREEN -S control

$ ps -ef | grep bash | grep 'pts/50'
nomad     7109  7108  0 12:49 pts/50   00:00:00 -bash

Der verlinkte Beitrag schlägt vor, den bashProzess mit PID 7109 abzubrechen. Dadurch wird auch der screen -dr controlProzess mit PID 7387 abgebrochen. Danach kann ich immer noch keine Verbindung zum Bildschirm herstellen.

Der Prozess, SCREEN -S controlder die Bildschirmsitzung gestartet hat init, ist der übergeordnete Prozess , den ich offensichtlich nicht beenden kann.

Gibt es eine Möglichkeit, die Sitzung mit dem nicht reagierenden Bildschirm wiederherzustellen?

Update: Dies geschieht unter CentOS 6.4 mit Kernel 2.6.32-358.6.1.el6.x86_64. Die Shells sind alle bash Version 4.1.2 (1) -release.


3
Was steht screen -lsin diesen "hängenden" Fällen? screen -d -r <session>bedeutet "abnehmen und wiederherstellen", daher sollte es keine Rolle spielen, wenn Sie es nicht aus erster Hand abgenommen haben. (Und dafür tut es oft nicht ...)
mveroone

Versuchen Sie, lsof auf den Bildschirmprozessen auszuführen, und prüfen Sie, ob etwas "hängengeblieben" ist. Screen verwendet einen Unix-Socket, um zwischen Prozessen zu kommunizieren, wahrscheinlich hat ihn etwas offen gehalten. Stellen Sie außerdem sicher, dass der Socket nicht gelöscht oder sein Besitzer geändert wurde. Im Allgemeinen sollten Sie auch angeben, welches Betriebssystem und welche Version Sie verwenden, obwohl ich nichts Besonderes im Sinn habe, das diesmal vom Betriebssystem abhängen würde.
Dan Pritts

3
Ssh'n Sie über einen anderen Hop, z. B. mit Netcat als Proxy-Befehl? In diesem Fall hatte ich das Problem, dass die SSH-Verbindung zur ersten Box unterbrochen wurde, aber der Netcat-Proxy-Befehl eine zweite SSH-Verbindung offen hält. das -d sollte aber funktionieren.
Jens Timmerman

Jens, dein Rat hat es geschafft. Ich habe in der Tat einen Proxy über Netcat erstellt und durch das Beenden auf dem Zwischenhost konnte ich erneut eine Verbindung zum Bildschirm herstellen.
Viktor Rosenfeld

Warum sollten Sie den übergeordneten Prozess des nicht reagierenden Bildschirmbefehls beenden wollen? Sie möchten den Befehl zum Anhängen des Bildschirms selbst beenden. # 7387 in deinem Fall.
Matthias Urlichs

Antworten:


6

Ich denke, du solltest es versuchen

screen -DR 

Auch beim nächsten Mal sollte der verärgerte Aufruf (in Großbuchstaben) dazu führen, dass die Verbindung zu der anderen Sitzung unterbrochen wird, die von Ihrem zwischengeschalteten Netcat-Hop gehalten wird.


Ich habe es versucht, es funktioniert nicht. Das Beenden des Netcat-Proxys ist der Trick.
Viktor Rosenfeld

Seltsam. Es sollte. Was passiert stattdessen?
Matthias Urlichs

Alle weiteren Aufrufe von screen (-dr, -x, -DR) bleiben für immer hängen. Sobald ich den Netcat-Proxy beendet habe, funktionieren diese Aufrufe wieder.
Viktor Rosenfeld

1

Wie von Jens Timmerman vorgeschlagen, war der ultimative Grund für dieses seltsame Verhalten, dass ich mit SSH ProxyCommand und eine Verbindung zum Remoteserver herstellte ncat. Nachdem ncatich das auf dem Zwischencomputer beendet habe, kann ich mich wieder an die Bildschirmsitzung anschließen.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.