Заставить экран GNU пережить перезагрузку

18

Я часто использую экран GNU. Я нахожу очень раздражающим, что каждый раз, когда сервер должен быть перезагружен, я теряю все свои сессии (даже если я знаю заранее, мне нужно настроить все заново).

Я искал в интернете возможности, как заставить экран пережить перезагрузку, но не нашел ничего, что бы сработало для меня. Некоторые методы, которые я нашел, и есть недостатки:

  • CryoPID : кажется мертвым, обещая с 2005 года включить поддержку экрана
  • DMCTP : есть проблемы с setuid (), у меня не работает (признаюсь, я не очень старался)
  • какой-то скрипт пытается воссоздать сессию с нуля; Вы все еще теряете свою историю, и я думаю, что переменные окружения также установлены неправильно (и когда я пытался, это не вызывало все сессии)

Может, кто-нибудь знает какой-нибудь лучший процесс с морозильной камерой? Это кажется наиболее перспективным способом.

fuenfundachtzig
источник
Может быть, вам стоит переходить в спящий режим вместо перезагрузки :-) Я помню, как давно использовал DMCTP, и это сработало (IIRC, но я не уверен ...)
ленивец
1
Ну, в большинстве случаев его обновления ядра или аппаратные замены, которые вызывают перезагрузку. (В любом случае, это не мое дело ...) - DMCTP: Было бы интересно узнать, как заставить его работать без перекомпиляции экрана (как это предлагается в Интернете).
fuenfundachtzig
1
Я использую tmux вместо экрана, и мне легче писать сценарии сессии. Это не «сохраняет» ваш сеанс, но вы можете легко отправлять команды в tmux для создания вашего макета и посылать «нажатия клавиш» клиенту, чтобы вы могли изменить каталог и запускать приложения, если это необходимо. Я уверен, что вы можете сделать это и на экране, но с tmux это кажется проще

Ответы:

13

Нет способа сохранить сеанс экрана так, как вы хотите. То, что я сделал, было следующей лучшей вещью: скриптовал autossh для подключения к моим серверам и настраивал мою установку так, как мне нравится.

Любить это.

Локальное соединение отключено, я жду, оно возвращается и работает (я использую вложенные экраны). Сервер отключен или перезагружен, я жду и вернусь в положение по умолчанию. Это дает мне чувство преемственности, которое я желал.

Во всяком случае, я задал этот точный вопрос несколько лет назад в списке экрана.

Резюме: не ищи вечную жизнь за экраном. Вместо этого учитесь воскресать.

Это основная часть конфигурации .screenrc:

Есть пример, rscreen, в пакете autossh, который я изменил в программе econnect.

Параметр --esc должен установить удаленное экранирование на что-то другое (мое экранирование `)

#add much much more scrollback
defscrollback 10000

# make some default windows

screen -t ADMIN     1
chdir /Users/chiggsy/Sites/
screen -t SITES    2
chdir /Users/chiggsy/src/
screen -t SRC 3
chdir
screen -t FERGUS  4 /Users/chiggsy/bin/econnect --host host.example.com --port 50000 --esc g --user sol
screen -t LAEG 5  /Users/chiggsy/bin/econnect --host host.example2.com --port 505000  --esc g --user invictus

screen -t ROOT      0   sudo su -m
chiggsy
источник
2

Смотрите: http://skoneka.github.io/screen-session/

Available screen-session modes: 

---- 
save              - save Screen ( and VIM ) session 
load              - load session 
ls                - list saved sessions 
---- 

dump              - print detailed informations about windows in the session 
group             - move windows to a group 
layoutlist        - display a list of layouts 
layout-checkpoint - record a snapshot of the current layout. 
layout-history    - display saved snapshots of the current layout 
layout-redo       - load a snapshot of the current layout, 
layout-undo       - load a snapshot of the current layout, 
layout-zoom       - zoom into and out of a region 
kill              - send SIGTERM to last the process started in a window 
kill-zombie       - kill all zombie windows in the session 
kill-group        - recursively kill all windows in a group 
manager           - sessions manager (screenie like) but featuring session 
                    preview in a split window 
nest-layout       - copy a layout to the current region 
new-window        - start a new Screen window in the same working directory 
                    on the position next to the current window 
name              - get or set the sessionname 
regions           - display a number in every region (like tmux display-panes) 
renumber          - renumber windows to fill gaps 
subwindows        - recursively print windows contained in groups 
Эрик Аронесты
источник
2

При сбое сервера тот же вопрос получил одну подсказку, которая здесь отсутствует: используйте tmuxс tmux-resurrect , а именно:

Восстановите tmuxсреду после перезагрузки системы.

Что он может восстановить для вас:

  • все сеансы, окна, панели и их порядок
  • текущий рабочий каталог для каждой панели
  • точное расположение панелей в окнах (даже при увеличении)
  • активный и альтернативный сеанс
  • активное и альтернативное окно для каждой сессии
  • окна с фокусом
  • активная панель для каждого окна
  • «сгруппированные сессии» (полезная функция при использовании tmux с несколькими мониторами)
  • программы, работающие на панели! Подробнее в восстанавливающих программах док .
Serv-вкл
источник