J'utilisais Irssi à l'écran mais j'ai perdu la connexion. Après que je ssh soit revenu sur le serveur, je ne peux plus attacher à cet écran. L'écran -ls montre que l'écran est déjà attaché.
J'ai essayé écran -d pour forcer à le détacher, et cela a dit de détacher mais l'écran -ls dit toujours qu'il est attaché. J'ai essayé Screen -X et il est juste suspendu là-bas.
[sub@server ~]$ screen -ls
There are screens on:
4033.poe (Detached)
7728.irssi (Attached)
2 Sockets in /var/run/screen/S-sub.
Que puis-je faire maintenant?
Si vous essayez de connecter l'écran "attaché", exécutez screen -xr irssi
. La majuscule '-x' envoie une commande à l'une des sessions d'écran, l'option "-X" minuscule vous permet de vous reconnecter à une session ci-jointe. Mais vous devez toujours donner le nom de la session puisqu'il y a plus d'un.
J'ai effacé ce comportement dans le passé en tuant le Shell qui a commencé la séance d'écran. Fondamentalement, tuer toutes les instances Bash pour mon utilisateur qui étaient non appartenant à l'écran.
tu peux essayer:
#Reattach a session and if necessary detach it first.
screen -d -r 7728.irssi
#Reattach a session. If necessary detach and logout remotely first.
screen -D -r 7728.irssi
c'est toujours une bonne idée d'utiliser le nom complet pid.tty
screen
est connu pour ne pas être compatible à l'envers entre versions. Si la version de screen
a été mise à jour sur le serveur, il serait peut-être possible que vous ne puissiez plus vous rendre aux sessions d'écran plus anciennes.
Dans ce cas, vous pouvez utiliser l'ancien écran binaire sur Reattach (à condition que votre gestionnaire de packages de distribution vous a sauvé quelque part) ou de tuer complètement la session.
J'ai eu un certain succès en envoyant le processus GNU/Screen un Sigchld (qu'il reçoit normalement lorsqu'une fenêtre est fermée), cela force qu'il touche (et éventuellement recréer) le fichier de socket.
Notez également qu'il existe deux façons d'invoquer l'exécutable screen
qui ne diffère que: SCREEN
est le composant côté serveur que vous essayez de vous reconnecter, tandis que screen
est Le côté client qui mélange des données entre votre terminal et le côté serveur. Vous voudrez peut-être essayer de tuer la version minuscule ...
Par exemple, dans ce qui suit, vous pouvez voir que mes processus screen
et SCREEN
_ Les processus ne sont pas considérés comme des parents et des enfants, indiquant que je suis joint à une session existante.
# ps fao pid,command
25070 SCREEN -U
25071 \_ vim +let &t_Co=256
25073 \_ -bash
25077 \_ -bash
...
18364 \_ sshd: username [priv]
18366 | \_ sshd: username@pts/17
18367 | \_ -bash
870 | \_ screen -U -x
Les sessions fraîches ressemblent plus à ceci:
19645 | \_ screen -S MySession
19646 | \_ SCREEN -S MySession
19647 | \_ bash
1485 | | \_ python
19700 | \_ bash
screen -r 4033
screen -x 7728
killall -9 sshd
Cela a fonctionné pour moi. J'ai eu 3 écrans différents et j'ai perdu 3 connexions SSH différentes. Après la reconnexion, les écrans étaient toujours attachés, j'ai émis la commande ci-dessus ... bien sûr que j'ai perdu ma connexion actuelle, mais c'était une nouvelle. Lors de la reconnexion suivante, chaque écran était détaché.
Remarque, si vous êtes superutilisateur, vous devez utiliser le --user
Option de tuer uniquement vos démons SSH.