Не можна отримати відокремлений екран для відновлення


11

Я використовую шпаклівку і маю ненадійне бездротове з'єднання, тому використовую екран, щоб продовжувати роботу. Часто я відключаюсь, і тоді я не можу повторно приєднати екран. Я біжу, screen -D -RRі він просто сидітиме там нескінченно. Я намагався ctrl+zповернути свою консоль, за нею ps aux | grep screenй далі, kill -9щоб отримати всі результати, а потім screen -D -RRзнову, але я отримую ті самі результати. Я намагаюся будь-яку комбінацію d та r, яку ви хочете згадати, але все одно вона просто сидить там. Мій екран там, він просто нічого не зробить, щонайменше, резюме.

Хтось має поради чи підказки чи ідеї щодо того, як змусити відновити сеанс на екрані?

Відповіді:


16

Я бачив це, коли я перекинув з'єднання на активний екран, а потім знову підключився. Помилка № 27462 (" Повторно підключіть стійла при втраті оригінального сеансу") описує проблему, якою я її бачу. Що здається, це те, що екран намагається повідомити tty, який утримує його, що він збирається виїхати, але оскільки tty зависнув через перерване з'єднання, він повинен чекати, коли відбудеться час очікування (що становить більше п'яти хвилин) У деяких випадках).

Щоб виправити це, я роблю це:

  • з'ясуйте, який тти тримається на екранній сесії ps -ef | grep screen | grep pty
  • знайти bash bash, який пов'язаний з цією tty ps -ef | grep bash | grep $PTY
  • вбити того баш kill -KILL $PID

Це призводить до того, що екран належним чином завершить відключення, і дозволяє нормально підключитися.

Дивіться тут приклад сценарію, який автоматизує це дещо.


пс -еф | греп екран | grep tty ніколи нічого не друкує, тому що ps -ef | grep екран ніколи не повертає нічого із рядком tty.
Дейв Аарон Сміт

Насправді приклад сценарію, здається, робить свою справу. Спасибі!
Дейв Аарон Сміт

1
Так, я мав на увазі "pty", а не "tty".
Девід Макінтош

2

У мене була подібна проблема з моїми сесійними екранами. Я називаю їх і налаштовую їх як багатокористувацькі сеанси. Що я виявив, це те, що він перелічував мої сеанси, але сказав мені, що я ні з ким знову не зв'язався. Потім я спробував:

screen -x <session_name>

Це працювало, як чемпіон!


1

Я не можу сказати, що у мене коли-небудь виникала проблема з тим, щоб екран не повертався, незалежно від того, який тип з'єднання я перебуваю. Мій звичайний метод:

ssh myname@foo
screen -S sessionName
(do my work... get disconnected...)

ssh myname@foo
screen -d (just to make sure anything wasn't left attached)
screen -r sessionName

1
Наприклад, екран-список повертає 32322.mySession (додається). Потім я екрану -d мою сесію. Потім екран-список все ще повертає 32322.mySession (додається), а екран -r mySession повертається. Немає екрана, який слід відновити з відповідним daveSession.
Дейв Аарон Сміт

ви спробували просто "screen -d"?
Джейсон Антман

0

Чи можливо, що ця помилка впливає на вас?

http://savannah.gnu.org/bugs/?27462

Чи можете ви спробувати виконати рішення, яке вони рекомендують, і побачити, чи працює воно?


Упорядкування не мало для мене сенсу. Мій висновок екрана ps -ef | grep зовсім не схожий на приклад.
Дейв Аарон Сміт

0

Soulrce: https://kb.iu.edu/data/ahrm.html

To see your existing screen sessions, enter:
  screen -list
This will display a list of your current screen sessions. For instance, if you had one attached screen, you would see:

         1636.pts-21.hostname      (Attached)

To detach an attached screen, enter:
  screen -D
If you have more than one attached screen, you can specify a particular screen to detach. For example, to detach the screen in the above example, you would enter:
  screen -D 1636.pts-21.hostname

0

Якщо ви такі розумні, як я, ви намагалися відновити екранну сесію, розпочату як rootу звичайному обліковому записі користувача. Знайшов це, ls /var/run/screenпоказавши мені каталог дляroot


0

У мене періодично виникають одні і ті ж проблеми (екран -r -d не поновлюється, не реагує). Щоб виправити, знайдіть термінал (tty / pty), пов’язаний із сеансом на екрані:

screen -list
There is a screen on:
    28176.pts-51.localhost        (Attached)
1 Socket in /tmp/uscreens/S-xxxx.

Знайдіть вказаний термінал (у цьому прикладі pts-51):

ps axuw | grep 'pts/51'   # will vary depending upon how pty's are named
you     12293  0.0  0.2  2148 1128 pts/51   Ss   10:34   0:00 -bash

Вбийте процеси на цьому терміналі (зазвичай це ваша оболонка):

kill 12293

запустіть ps ще раз, щоб переконатися, що його немає. Якщо ні :

kill -9 12293

На моєму сервері (gnu / linux) мені іноді доведеться вбивати -9 кілька разів, поки він не помре.

Після того, як всі процеси на цій tty не зникнуть, екран повинен відновитись правильно:

screen -r -d

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.