Повторно приєднати або створити названий екранний сеанс? (або постійні екранні сеанси)


27

В основному у мене є сеанс віддаленого екрана, до якого я хочу автоматично повторно приєднатись. Зараз я роблю це за допомогою наступної команди (як закладка iTerm або псевдонім)

ssh host -t screen -x thesessionname

Це прекрасно працює, але якщо сеанс загине з будь-якої причини, я хотів би його відтворити під час наступного з'єднання. -RПрапор screenє майже ідеальним:

ssh host -t screen -R -S thesessionname

..але якщо сесія вже приєднана, робиться другий сеанс (як -Rпросто виглядає перший сеанс, якщо він не знайдеться, він створює новий)

Чи є спосіб змусити -Rпрапор шукати додані сеанси та створити новий лише тоді, коли thesessionnameйого немає?

Якщо це зробити нелегко, як я можу автоматично відтворити сеанс екрана, коли він загине? Можливо, сценарій запускається через cron, який шукає названий сеанс, створюючи його, якщо він не існує?

Відповіді:


32

Скажіть екрану, щоб бути трохи наполегливішим щодо спроб:

-D -R
    Attach here and now. In detail this means: If a session is run-
    ning,  then  reattach.  If necessary detach and logout remotely
    first.  If it was not running create it and  notify  the  user.
    This is the author's favorite.

Тож поєднайте два, і ви повинні мати своє рішення ("-DR" еквівалентно "-D -R"):

screen -DR <yoursession> 

Додатково і корисно знати, ви можете переглянути запущені сеанси за допомогою:

screen -ls

5
Ідеально, screen -x -R -S mainце те, що я в кінцевому підсумку використав (працює так само без примусового від'єднання), дякую!
дбр

Іноді ви хочете скористатися sceen -r <yoursession>, викличе помилку, коли вона вже додається (замість створення нового сеансу).
небезпека89

11

Кілька хороших варіантів. По-перше, мій улюблений:

screen -x -R

Це буде приєднано до першого доступного сеансу на екрані (спільний доступ, якщо підключено інше з'єднання), і якщо взагалі немає сеансів на екрані, запустіть новий.

screen -d -RR

Документи для цього кажуть: "Знову приєднайте сеанс і, якщо потрібно, від'єднайте або створіть його. Використовуйте перший сеанс, якщо доступно більше одного сеансу". В основному, подвійний R змушує шукати перший сеанс, до якого потрібно приєднатися.

screen -D -RR

"Прикріпіть тут і зараз. Що б це не означало, просто зробіть це". Буде від'єднано та вилучено будь-які інші додані сеанси та додається до першого сеансу, який він може. По суті, робить усе, що потрібно зробити, щоб приєднатися до існуючого сеансу, і створює новий, якщо там нічого немає.

Найперший (-x -R) найменш ймовірно спричинить проблеми (не від'єднає ваше інше з'єднання), але просто звичайний завжди приєднується до чогось, якщо є щось, до чого можна приєднати, і створює щось, якщо немає чого прикріпити.


1
Це всі приємні / зручні варіанти, але жоден з них не відповідає на початкове запитання, яке було (пере) підключити до сеансу за назвою .
Даніель

5

я використовую

screen -dRRS sessname

Я не хочу, щоб весь мій логін на іншій оболонці випав, як -Dце робиться, і я точно не хочу режиму мультиприєднання -x.

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