Ich arbeite an einem Remote-Debian-Jessie-Server. Ich habe eine Bildschirmsitzung gestartet, mit der Ausführung eines Skripts begonnen und wurde dann aufgrund eines Netzwerk-Timeouts getrennt.
Nun habe ich mich erneut angemeldet und möchte die Sitzung fortsetzen.
Folgendes wird mir angezeigt, 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 scheine an zwei Bildschirme gleichzeitig angeschlossen zu sein.
Jetzt möchte ich die zuvor ausgeführte Sitzung fortsetzen, 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 es nicht erneut 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.
Antwort1
Die Sitzung ist noch an einem anderen Terminal angeschlossen. Der Server hat den Netzwerkausfall bei dieser Verbindung nicht erkannt: Er erkennt den Ausfall nur, wenn er versucht, ein Paket zu senden und nach einem Timeout eine Fehlermeldung oder keine Antwort erhält, aber das ist noch nicht passiert. Sie befinden sich in einer häufigen Situation, in der der Client den Ausfall erkannt hat, weil er versucht hat, eine Eingabe zu senden, und dies fehlgeschlagen ist, der Server jedoch einfach da sitzt und auf eine Eingabe wartet. Schließlich sendet der Server ein Keepalive-Paket und erkennt, dass die Verbindung unterbrochen ist.
Verwenden Sie in der Zwischenzeit die -d
Option, um die Bildschirmsitzung vom Terminal zu trennen, in dem sie sich befindet.
screen -r -d 30608
screen -rd
ist so ziemlich die Standardmethode zum Anhängen an eine vorhandene Bildschirmsitzung.
Antwort2
Entsprechend derHandbuchSie können nur "fortsetzen"losgelöstBildschirme:
'
-ls
[übereinstimmen]'
'-list
[übereinstimmen]'
Bildschirm nicht starten, sondern stattdessen eine Liste mit Sitzungsidentifikationszeichenfolgen drucken (normalerweise in der Form pid.tty.host; siehe Sitzungsname).Als 'getrennt' markierte Sitzungen können fortgesetzt werden mitscreen -r
. Die als „angeschlossen“ markierten Sitzungen laufen und haben ein Steuerterminal. Wenn die Sitzung im Mehrbenutzermodus läuft, wird sie als „Multi“ markiert. Als „nicht erreichbar“ markierte Sitzungen befinden sich entweder auf einem anderen Host oder sind tot. Eine nicht erreichbare Sitzung gilt als tot, wenn ihr Name entweder mit dem Namen des lokalen Hosts oder dem angegebenen Parameter (sofern vorhanden) übereinstimmt.-r
Eine Beschreibung, wie Übereinstimmungen erstellt werden, finden Sie unter der Flagge. Als „tot“ markierte Sitzungen sollten gründlich geprüft und entfernt werden. Fragen Sie Ihren Systemadministrator, wenn Sie sich nicht sicher sind. Entfernen Sie Sitzungen mit der-wipe
Option „ “.
Sie möchten diese Option:
'
-x
'
An eine Sitzung anhängen, die bereits woanders angehängt ist (Multidisplay-Modus). Der Bildschirm verweigert die Anhängung von sich aus. Beim Kaskadieren mehrerer Bildschirme werden jedoch keine Schleifen erkannt. Vorsicht.
Antwort3
Ich schließe mich screen
den Optionen an -rD
.
Siehe Handbuch:
-D -r
Reattach a session. If necessary detach and logout remotely first.
Antwort4
Mir sind zwei Möglichkeiten bekannt:
- screen -rd <Bildschirmname/ID>
Dadurch wird der Bildschirm getrennt und Sie werden erneut verbunden. Für alle bereits verbundenen Benutzer wird der Bildschirm geschlossen.
- screen -x <Bildschirmname/ID>
Dadurch werden Sie direkt mit dem Bildschirm verbunden, ohne verbundene Benutzer zu beenden. Dies wird hauptsächlich für Mehrbenutzeranzeigen verwendet.