понедельник, 2 февраля 2009 г.

Использование screen на удалённых машинах

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

Как не банально встала задача запускать долго играющие процессы под линуксом удаленно по ssh, и необходимо было осушествлять их выполнений и после завершения сеанса терминала. Для того чтобы "отделить" программу от терминала надо использовать screen или запускать программу внутри другого скипта, поэтому юзаем screen или nohup. Мне более понравилось решение с помощью screen.

Есть такая штука: screen. Программа создавалась, чтобы запускать несколько терминальных сессий внутри одного терминала. Надобность в такой возможности резко снизилась в связи с широким распространением эмуляторов терминала с поддержкой вкладок (вроде Gnome Terminal). Впрочем, до сих пор может быть полезна на удалённых машинах.

Однако есть у screen и другое полезное свойство: возможность отсоединять виртуальные сеансы от физического терминала и подсоединять к другому. Это, в частности, позволяет запускать долгоиграющие процессы на удалённых машинах, без необходимости быть постоянно на них залогиненным.

Способ использования такой:

1. зайти на удалённую машину (по ssh)
2. запустить там screen
3. запустить некий долгий процесс внутри сессии screen
4. отсоединить сессию screen, нажав CTRL-A и затем d (вообще, все внутренние команды screen начинаются с CTRL-A, например, CTRL-A + ? покажет краткую справку)
5. выйти из удалённой системы (всё запущенное внутри screen продолжит работать)
6. уйти обедать, лечь спать, уехать в отпуск, заняться другими делами
7. когда захочется, войти повторно на удалённую машину, и подсоединиться к уже запущенной сессии screen, набрав screen -r.

Таким же образом можно запускать screen и на локальной машине. Это позволит, например, уменьшить количество одновременно открытых терминалов, а также позволит спокойно перезапускать иксы, не опасаясь за то, что какой-то работающий в фоне процесс может прерваться.

На одной машине можно открыть несколько разных сессий screen:
ssh ...
screen -S wget
[Ctrl-A d]
screen -S backup
[Ctrl-A d]
exit

ssh ...
screen -r backup
[Ctrl-A d]
screen -r wget
Статью взял отсюда

Комментариев нет:

Отправить комментарий