Я работаю на удаленном сервере Debian Jessie. Я запустил сеанс screen, запустил скрипт, а затем был отключен из-за тайм-аута сети.
Теперь я снова вошел в систему и хочу возобновить сеанс.
Вот что я вижу, когда перечисляю экраны:
$ 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.
решение1
Сеанс все еще подключен к другому терминалу. Сервер не обнаружил сбой сети на этом соединении: он обнаруживает сбой только тогда, когда пытается отправить пакет и получает ошибку или не отвечает после тайм-аута, но этого еще не произошло. Вы находитесь в обычной ситуации, когда клиент обнаружил сбой, потому что он попытался отправить какой-то ввод и потерпел неудачу, но сервер просто сидит и ждет ввода. В конце концов сервер отправит пакет keepalive и обнаружит, что соединение мертво.
В это время воспользуйтесь -d
возможностью отсоединения сеанса экрана от терминала, в котором он находится.
screen -r -d 30608
screen -rd
— это, по сути, стандартный способ присоединения к существующему сеансу экрана.
решение2
Согласноруководствовы можете "возобновить" толькоотсоединенныйэкраны:
'
-ls
[соответствовать]'
'-list
[соответствовать]'
Не запускать screen, а вместо этого вывести список строк идентификации сеанса (обычно в форме pid.tty.host; см. Имя сеанса).Сеансы, отмеченные как «отделенные», можно возобновить с помощьюscreen -r
. Те, которые отмечены как «присоединенные», запущены и имеют управляющий терминал. Если сеанс работает в многопользовательском режиме, он отмечен как «многопользовательский». Сеансы, отмеченные как «недоступные», либо находятся на другом хосте, либо мертвы. Недоступный сеанс считается мертвым, если его имя совпадает либо с именем локального хоста, либо с указанным параметром, если таковой имеется. См. флаг-r
для описания того, как строить соответствия. Сеансы, отмеченные как «мертвые», следует тщательно проверить и удалить. Обратитесь к системному администратору, если вы не уверены. Удалите сеансы с помощью-wipe
параметра « ».
Вам нужна такая опция:
'
-x
'
Присоединиться к сеансу, который уже присоединен в другом месте (многоэкранный режим). Экран отказывается присоединяться изнутри себя. Но при каскадировании нескольких экранов циклы не определяются; будьте осторожны.
решение3
Прикрепляю screen
с вариантами -rD
.
См. руководство:
-D -r
Reattach a session. If necessary detach and logout remotely first.
решение4
Я знаю два способа:
- экран -rd <имя_экрана/идентификатор>
Это отсоединит экран и снова подключит вас. Это закроет экран для всех предварительно подключенных пользователей.
- экран -x <имя_экрана/идентификатор>
Это напрямую подключит вас к экрану, не прерывая подключенных пользователей. Это в основном используется для многопользовательских дисплеев.