Je travaille sur un serveur Debian Jessie distant. J'ai démarré une session d'écran, commencé à exécuter un script, puis j'ai été déconnecté par un délai d'attente réseau.
Maintenant, je me suis reconnecté et je souhaite reprendre la session.
Voici ce que je vois lorsque je liste des écrans:
$ 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.
Il me semble que je suis attaché à deux écrans à la fois.
Maintenant, je veux reprendre la session que j'exécutais auparavant, pour voir les résultats de mon script:
$ 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.
Pourquoi je ne peux pas me reconnecter?
J'ai le même problème avec l'autre écran:
$ 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.
La session est toujours attachée sur un autre terminal. Le serveur n'a pas détecté la panne du réseau sur cette connexion: il ne détecte la panne que lorsqu'il essaie d'envoyer un paquet et obtient une erreur ou aucune réponse après un délai d'attente, mais cela ne s'est pas encore produit. Vous êtes dans une situation courante où le client a détecté la panne car il a tenté d'envoyer des entrées et a échoué, mais le serveur est juste assis là en attente d'entrée. Finalement, le serveur enverra un paquet keepalive et détectera que la connexion est morte.
En attendant, utilisez le -d
option pour détacher la session écran du terminal où elle se trouve.
screen -r -d 30608
screen -rd
est à peu près la façon standard de joindre une session d'écran existante.
Selon les manuel vous ne pouvez "reprendre" que écrans détachés :
"
-ls
[match] ’
‘-list
[match] ’
Ne démarrez pas l'écran, mais imprimez plutôt une liste de chaînes d'identification de session (généralement au format pid.tty.Host; voir Nom de la session). Les sessions marquées "détachées" peuvent être reprises avecscreen -r
. Ceux marqués "attachés" sont en cours d'exécution et disposent d'un terminal de contrôle. Si la session s'exécute en mode multi-utilisateur, elle est marquée "multi". Les sessions marquées comme "inaccessibles" vivent sur un hôte différent ou sont mortes. Une session inaccessible est considérée comme morte, lorsque son nom correspond soit au nom de l'hôte local, soit au paramètre spécifié, le cas échéant. Voir le-r
flag pour une description comment construire des correspondances. Les sessions marquées comme "mortes" doivent être soigneusement vérifiées et supprimées. Demandez à votre administrateur système si vous n'êtes pas sûr. Supprimez les sessions avec le ‘-wipe
’.
Ce que vous voulez, c'est cette option:
"
-x
"
Attacher à une session qui est déjà attachée ailleurs (mode multi-affichage). L'écran refuse de se joindre de lui-même. Mais lors de la cascade de plusieurs écrans, les boucles ne sont pas détectées; prends soin de toi.
J'attache à l'écran avec des options -rD
Du manuel:
-D -r
Reattach a session. If necessary detach and logout remotely first.