По сути, у меня есть сеанс удаленного экрана, к которому я хочу автоматически подключиться. В настоящее время я делаю это с помощью следующей команды (как закладки iTerm или псевдонима)
ssh host -t screen -x thesessionname
Это работает нормально, но если сеанс по какой-либо причине прервется, я бы хотел, чтобы он был создан заново при следующем подключении. Флаг -R
дляscreen
почтиидеальный:
ssh host -t screen -R -S thesessionname
..но если сеанс уже присоединен, создается второй сеанс (так как -R
простой поиск первого отсоединенного сеанса, если ничего не найдено, создается новый)
Есть ли способ заставить -R
флаг также искать прикрепленные сеансы и создавать новый только в том случае, если thesessionname
он не существует?
Если это не так просто сделать, как я могу автоматически воссоздать сеанс экрана, когда он умирает? Возможно, скрипт, запущенный через cron, который ищет именованный сеанс, создавая его, если он не существует?
решение1
Попросите экран быть немного настойчивее в попытках:
-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
решение2
Несколько хороших вариантов. Сначала мой любимый:
screen -x -R
Это приведет к подключению к первому доступному сеансу экрана (общий доступ возможен, если подключено другое соединение), а если сеансов экрана вообще нет, начнется новый.
screen -d -RR
В документации для этого говорится: «Повторно прикрепите сеанс и при необходимости отсоедините или создайте его. Используйте первый сеанс, если доступно более одного сеанса». По сути, двойное R заставляет его искать первый сеанс для присоединения.
screen -D -RR
"Присоединяйтесь здесь и сейчас. Что бы это ни значило, просто сделайте это". Отсоединит и удаленно выйдет из всех других прикрепленных сеансов и присоединится к первому сеансу, к которому сможет. По сути, делает все необходимое для присоединения к существующему сеансу и создает новый, если там ничего нет.
Самый первый вариант (-x -R) с наименьшей вероятностью вызовет проблемы (не отключит другое соединение), но он просто всегда подключается к чему-то, если есть к чему подключиться, и создает что-то, если не к чему подключиться.
решение3
я использую
screen -dRRS sessname
Я не хочу, чтобы весь мой логин в другой оболочке был потерян, как -D
это происходит, и мне определенно не нужен режим множественного присоединения -x
.