Не удается возобновить экран, говорит, что я уже подключен?


151

Я работаю на удаленном сервере Debian Jessie. Я запустил сеанс экрана, запустил скрипт, затем был отключен по сетевому таймауту.

Теперь я снова вошел в систему и хочу возобновить сеанс.

Вот что я вижу, когда я перечисляю экраны:

$ 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.

Кажется, я привязан к двум экранам одновременно.

Теперь я хочу возобновить сеанс, который я выполнял ранее, чтобы увидеть результаты моего сценария:

$ 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.

Почему я не могу повторно прикрепить?

У меня та же проблема с другим экраном:

$ 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.

Ответы:


242

Сеанс все еще присоединен к другому терминалу. Сервер не обнаружил сбой сети в этом соединении: он обнаруживает сбой только при попытке отправить пакет и возвращает ошибку или нет ответа по истечении времени ожидания, но это еще не произошло. Вы находитесь в обычной ситуации, когда клиент обнаружил сбой, потому что он попытался отправить какой-то ввод и не смог, но сервер просто сидит в ожидании ввода. В конце концов сервер отправит пакет keepalive и обнаружит, что соединение разорвано.

А пока используйте -dопцию для отключения сеанса экрана от терминала, в котором он находится.

screen -r -d 30608

screen -rd это в значительной степени стандартный способ присоединения к существующему сеансу экрана.


15
Для присоединения к существующему сеансу экрана, это screen -x, screen -rdчтобы прикрепить к нему после того , как отдельному его от каждого терминала было присоединен. В случае с OP, я бы согласился, что последнее предпочтительнее, но в общем случае не обязательно. Я обычно использую, -xRчтобы прикрепить или создать, если нет ничего, чтобы прикрепить.
Стефан Шазелас

10

Согласно инструкции вы можете «возобновить» только отдельные экраны:

' [match] ' ' [match] ' Не запускать экран, а вместо этого печатать список строк идентификации сеанса (обычно в форме pid.tty.host; см. Имя сеанса). Сессии, помеченные как «отключенные», могут быть возобновлены . Те, которые отмечены как «присоединенные», работают и имеют управляющий терминал. Если сеанс работает в многопользовательском режиме, он помечается как «мульти». Сессии, помеченные как «недоступные», либо живут на другом хосте, либо мертвы. Недоступный сеанс считается мертвым, если его имя соответствует либо имени локального хоста, либо указанному параметру, если таковой имеется. Увидеть-ls
-list
screen -r-rфлаг для описания того, как построить совпадения. Сессии, помеченные как «мертвые», должны быть тщательно проверены и удалены. Спросите своего системного администратора, если вы не уверены. Удалите сеансы с -wipeопцией ' '.

Что вы хотите, это вариант:

' -x'
Присоединиться к сеансу, который уже подключен в другом месте (режим нескольких дисплеев). Экран отказывается прикреплять изнутри себя. Но при каскадном подключении нескольких экранов петли не обнаруживаются; Береги себя.


4
С -xсеансом все равно будет прикреплен «куда-то». Чтобы полностью перенять сеанс, нужно использовать -d | -D (параметры отсоединения) вместе с -r | -R (параметры повторного подключения).
Андрей Козлов

1
Это альтернатива, но, возможно, не то, что нужно ОП. Я часто прикрепляюсь из разных мест.
Томас Дики

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.