Есть ли способ заставить сеанс «Экран» пережить перезагрузку?

25

Я использую утилиту Screen и хочу сохранить сеанс при перезагрузке машины. Если это невозможно, вы можете порекомендовать другие альтернативы Screen , которые позволили бы сохранить сеансы между перезагрузками.

Я использую Ubuntu Server 10.04 (Lucid Lynx), если это имеет значение.

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

Сергей Г
источник
что ты пытаешься? Вы хотите сохранить историю или все, что работает в вашем сеансе экрана?
Марсель G
1
Разве это не победит цель перезагрузки?
Брайан Кноблаух
что вы подразумеваете под «сессиями»? Вы имеете в виду, что у вас есть ssh-соединения с другими хостами в нескольких окнах экрана? Если это именно то, что вы имеете в виду, то запись файла .screenrc и указание user @ host, к которому вы хотите добавить лозунг, должны помочь ..., если вы включили ssh без пароля. Затем, когда вы запускаете экран, автоматически запускаются все соединения ssh. Вы даже можете запустить его из rc.local (немного хитро, потому что вам нужно запустить его с su - yourusername), поэтому при входе в систему вы можете снова подключиться к сеансу рабочего экрана.
Natxo Asenjo
1
что более важно, почему вы все время перезагружаетесь? Unix-серверы не являются Windows-серверами, они рассчитаны на большое время безотказной работы, а на машинах, как известно, могут работать годами (без исправлений безопасности ядра). Если ваша перезагрузка вызвана исправлениями безопасности ядра, посмотрите на что-то вроде ksplice.
Дворник Unix

Ответы:

16

Прежде всего, давайте проясним пару важных вещей:

  1. Сколько машин задействовано? Другими словами, вы подключаетесь к удаленному компьютеру или все на вашем локальном компьютере?
  2. Если задействована удаленная машина, какая машина перезагружается: сервер или клиент?

Если задействована одна машина, или если сервер перезагружается, то в большинстве случаев вам не повезло.

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

Еще одна возможность (опять же, будет ли это полезно для вас, зависит от ваших обстоятельств) - запустить машину с экраном на виртуальной машине. Предположим, что это удаленный физический сервер, который необходимо перезагрузить, но на нем установлена ​​гостевая ОС (например, VMware). Вы можете приостановить работу гостевой ОС и запустить ее снова после перезагрузки оборудования. Все зависит от того, почему вам нужно перезагрузить компьютер, который не был указан, и насколько вы контролируете компьютер, и готовы ли вы пойти на все эти неприятности.

Там нет простого решения, и, возможно, ни одно из решений не будет работать для вас. Но удачи.

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

Но, по всей вероятности, вы имеете в виду либо удаленную машину, либо единственную перезагружаемую машину, и в этом случае простого способа сделать это не существует. Поначалу CryoPID звучит многообещающе, но его веб-сайт говорит, что он не работает для экрана.

Но есть еще один несколько многообещающий вариант, который стоит изучить. (Будет ли это работать для вас, во многом зависит именно то, что вы пытаетесь сделать.) Проверьте это на github.com: https://github.com/skoneka/screen-session/tree/master/ScreenSession/

иконоборец
источник
+1 для cryoPID, не знал об этом!
Дворник Unix
ScreenSession выглядит интересно, по описанию это именно то, что я и хотел
Sergey G
5

В некоторых редких случаях это возможно (см. CryoPID или CryoPID2 ), но в целом это сложно, поэтому сделать это невозможно.

pjz
источник
Ссылка не работает.
Касперд
4

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

Gaius
источник
На самом деле я хотел бы обновить свой ответ на tmux-resurrect
Гай
tmux-resurrect выглядит очень хорошим решением.
серв-ин
4

Вы не можете. Конечно, не на той же машине

Crankyadmin
источник
Что значит «не могу сделать» ?
Питер Мортенсен
1

Во всем этом сам экран довольно маргинален. Не «Экран», который вы хотите «сохранить», не так ли ?, а среды внутри различных сеансов экрана, какими бы они ни были.

Похоже, вы предполагаете, что сохранение сеанса Screen будет охватывать процесс SSH внутри него и все виды. То, что работает внутри Screen, вообще не является делом Screen, и это те вещи, которые трудно «сохранить» ... что бы это ни значило, если бы они были осуществимы.

Крис Филлипс
источник