20080111

Использование 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 и на локальной машине. Это позволит, например, уменьшить количество одновременно открытых терминалов, а также позволит спокойно перезапускать иксы, не опасаясь за то, что какой-то работающий в фоне процесс может прерваться.

Дополнение: Как заметил в комментариях Ivan A-R, на одной машине можно открыть несколько разных сессий 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