UMGUM.COM (лучше) 

Screen - спаситель ( Screen - спаситель от утери связи. )

28 июля 2010  (обновлено 27 мая 2017)

Эта публикация отнесена в архив. Она неактуальна.

OS: Debian Lenny.

Ездил я на курсы повышения квалификации в город страны Казахстан, пока не ставший полноценной столицей, не смотря на массу "понтовых" деяний слетевшихся туда "столице-строителей", но претендующий на звание это, иначе говоря - в Астану. Пришлось там побыть пару недель и, естественно, от удалённой работы с немаленьким сетевым хозяйством никуда деться не получилось; хочешь, не хочешь, а на связь с оборудованием и серверами выходить пришлось не единожды.

Обучение проходило в залах интернет-кафе "CafeMax", филиалом от московской сети с аналогичным названием, если я верно понял. Выходить на связь приходилось из этого же здания, используя Wi-Fi в качестве транспорта. Брать каждое утро бумажку с нацарапанным на ней карандашом ключом доступа к сети у местного "компутерщика" мне не составляло труда.

Так вот, такого плохого доступа в интернет я не встречал до сих пор вообще никогда. Разве что GPRS у BeeLine в Павлодаре и Астане хуже, но там хоть обрывы не так часты. В "CafeMax" связь рвалась каждые десять-пятнадцать минут. По быстрому накатал скрипт, осуществляющий переподключение в случае потери доступа, но обрыв он и есть обрыв, даже в Астане - SSH сессии "отваливаются", запущенные приложения "убиваются" системой при потере связи с родительским "шеллом", скрипты и конфигурационные в процессе правки не сохраняют наработок. Вот тут я перешагнул порог, за которым периодическое использование утилитой screen переходит в постоянное.

# aptitude install screen

Screen - утилита, реализующая полноэкранный и достаточно мощный консольный оконный менеджер эмуляции терминала VT100 с поддержкой скроллинга и поиска в окне и функцией копирования/вставки между ними. Это своего рода консоль в консоли. Самая интересная функция утилиты, ради которой её использует абсолютное большинство, в том, что можно в любой момент отсоединиться от сеанса screen и сеанса работы в консоли. После этого можно в любой момент, присоединившись к работающему "в фоне" сеансу screen, вновь продолжить работу с того места где остановились ранее, при то, что процедуры, запущенные в сеансе screen спокойно себе работали, не думая прерываться.


Screen имеет весьма богатый функционал управления своими сеансами, кто хочет - почитает об этом в документации. Меня же эти "фишки" особенно не заботили, как правило, я использовал её по простому, для - "по быстрому заскочить".

Создать единственную сессию screen можно элементарно:

# screen

Отключится (detach) от сессии screen можно с помощью зарезервированной комбинации клавиш: Ctrl+a-d (вначале одновременное нажатие клавиш Ctrl и a, потом одиночное нажатие клавиши d). Обрыв связи или закрытие окна "шелла" в системе с GUI воспринимается screen как тоже отключение (detach).

Подключится к единственному запущенному сеансу screen не сложнее, чем его запустить:

# screen -rd

Где:

"-r" - указание осуществить переподключение к существующей сессии (reconnect);
"-d" - указание осуществить отключение (detach) других клиентов от запущенной сессии screen (на тот случай, если мы сами забыли о том, что уже подключены к сессии screen и не повторять ввод).

Получить быструю справку о поддерживаемых комбинациях клавиш в сеансе screen можно с помощью следующей комбинации: Ctrl+a-?

Для более серьёзной затяжной работы со множеством терминалов очень удобно использовать именованные сеансы (это не "окна" в пределах одной сессии screen, а именно отдельные сеансы; между ними нельзя переключаться с помощью Ctrl+a-n и Ctrl+a-p). Просто при запуске указываем имя для сессии:

# screen -S screen.name

Как обычно, от него можно отключится, а переподключение осуществить с точным указанием имени сессии:

# screen -r screen.name

Мне такой режим удобнее, чем переключение между безымянными "окнами" в рамках одной сессии screen; иногда мне проще создать заранее именованную среду, например "screen -S update", "screen -S bind", "screen -S shell0" и так далее, и подключатся к каждой по необходимости и уже в ней создавать "окна" как "виртуальные терминалы".

Для того, чтобы не плодить не именованных сессий, не плохо было бы взять за правило перед созданием сессии screen проверять, нет ли уже подходящей именованной:

# screen -list

Вывод говорящий:

There are screens on:
  2027.bind      (07/28/2010 03:29:30 PM)    (Detached)
  1925.update    (07/28/2010 03:28:59 PM)    (Detached)
  1611.shell     (07/28/2010 03:27:24 PM)    (Detached)
  3458.rtorrent  (07/28/2010 06:58:12 AM)    (Detached)
4 Sockets in /var/run/screen/S-user.

Мне, до сих пор работающему на более или менее стабильных каналах передачи данных, привыкшему на уровне автоматизма каждые пять минут в текстовых редакторах жать Ctrl+S или F2, понадобилось съездить в Астану, чтобы оценить все прелести утилиты screen. Хе.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )