Kann Bildschirm nicht fortsetzen, sagt, dass ich bereits angehängt bin?

151

Ich arbeite an einem entfernten Debian Jessie-Server. Ich habe eine Bildschirmsitzung gestartet, mit der Ausführung eines Skripts begonnen und bin dann durch ein Netzwerk-Timeout von der Verbindung getrennt worden.

Jetzt habe ich mich wieder eingeloggt und möchte die Sitzung wieder aufnehmen.

Folgendes sehe ich, wenn ich Bildschirme aufliste:

$ screen -ls
There are screens on:
    30608.pts-8.myserver    (11/03/2015 08:47:58 AM)    (Attached)
    21168.pts-0.myserver    (11/03/2015 05:29:24 AM)    (Attached)
    7006.pts-4.myserver (10/23/2015 09:05:45 AM)    (Detached)
    18228.pts-4.myserver    (10/21/2015 07:50:49 AM)    (Detached)
    17849.pts-0.myserver    (10/21/2015 07:43:53 AM)    (Detached)
5 Sockets in /var/run/screen/S-me.

Ich bin anscheinend an zwei Bildschirme gleichzeitig gebunden.

Jetzt möchte ich die Sitzung fortsetzen, die ich zuvor ausgeführt habe, um die Ergebnisse meines Skripts anzuzeigen:

$ screen -r 30608.pts-8.myserver
There is a screen on:
    30608.pts-8.OpenPrescribing (11/03/2015 08:47:58 AM)    (Attached)
There is no screen to be resumed matching 30608.pts-8.myserver.

Warum kann ich nicht wieder anhängen?

Ich habe das gleiche Problem mit dem anderen Bildschirm:

$ screen -r 21168.pts-0.myserver
There is a screen on:
    21168.pts-0.OpenPrescribing (11/03/2015 05:29:24 AM)    (Attached)
There is no screen to be resumed matching 21168.pts-0.myserver.
Richard
quelle

Antworten:

242

Die Sitzung ist noch an ein anderes Terminal angehängt. Der Server hat den Netzwerkausfall auf dieser Verbindung nicht erkannt: Er erkennt den Ausfall nur, wenn er versucht, ein Paket zu senden, und erhält nach einer Zeitüberschreitung einen Fehler oder keine Antwort. Dies ist jedoch noch nicht geschehen. Sie befinden sich in einer normalen Situation, in der der Client den Ausfall erkannt hat, weil er versucht hat, Eingaben zu senden, der Server jedoch nur auf Eingaben wartet. Schließlich sendet der Server ein Keepalive-Paket und erkennt, dass die Verbindung unterbrochen ist.

Verwenden Sie in der Zwischenzeit die -dOption, um die Bildschirmsitzung von dem Terminal zu trennen, in dem sie sich befindet.

screen -r -d 30608

screen -rd Dies ist so ziemlich die Standardmethode zum Anhängen an eine vorhandene Bildschirmsitzung.

Gilles
quelle
15
Um zu einem bestehenden Bildsitzung anhängen, dann ist es screen -x, screen -rdist es zu befestigen , nachdem er von abgelöst hat jeder Klemme wurde an. Im Falle des OP würde ich zustimmen, dass letzteres wahrscheinlich bevorzugt wird, aber im allgemeinen Fall nicht unbedingt. Ich benutze im Allgemeinen -xRzum Anhängen oder Erstellen, wenn es nichts zum Anhängen gibt.
Stéphane Chazelas
10

Laut Handbuch können Sie nur getrennte Bildschirme "wieder aufnehmen" :

' [match] ' ' [match] ' Startet den Bildschirm nicht, sondern druckt stattdessen eine Liste der Zeichenfolgen zur Sitzungsidentifizierung (normalerweise in der Form pid.tty.host; siehe Sitzungsname). Sitzungen, die als "getrennt" markiert sind, können mit fortgesetzt werden . Die mit "Attached" gekennzeichneten Geräte laufen und verfügen über ein Bedienterminal. Wenn die Sitzung im Mehrbenutzermodus ausgeführt wird, ist sie als "Multi" markiert. Sitzungen, die als "nicht erreichbar" markiert sind, befinden sich entweder auf einem anderen Host oder sind tot. Eine nicht erreichbare Sitzung gilt als beendet, wenn ihr Name entweder mit dem Namen des lokalen Hosts oder mit dem angegebenen Parameter (falls vorhanden) übereinstimmt. Siehe die-ls
-list
screen -r-rFlag für eine Beschreibung, wie Übereinstimmungen erstellt werden. Sitzungen, die als "tot" markiert sind, sollten gründlich überprüft und entfernt werden. Fragen Sie Ihren Systemadministrator, wenn Sie sich nicht sicher sind. Entfernen Sie Sitzungen mit der -wipeOption ' '.

Was Sie wollen, ist diese Option:

' -x'
An eine Sitzung anhängen, die bereits an einer anderen Stelle angehängt ist (Multi-Display-Modus). Bildschirm weigert sich, aus sich selbst zu befestigen. Wenn Sie jedoch mehrere Bildschirme hintereinander schalten, werden keine Schleifen erkannt. sich kümmern.

Thomas Dickey
quelle
4
Bei -xeiner Session wird noch "irgendwo" angehängt. Um die Sitzung vollständig zu übernehmen, sollte man -d | -D (Optionen entfernen) zusammen mit -r | -R (Optionen erneut zuordnen) verwenden.
Andrew Kozlov
1
Das ist eine Alternative, aber möglicherweise nicht das, was OP braucht. Ich hänge häufig von mehreren Standorten aus an.
Thomas Dickey
4

Ich befestige, um mit Wahlen zu screenen -rD

Aus dem Handbuch:

-D -r
Reattach a session. If necessary detach and logout remotely first. 
Marsel Arduanov
quelle