среда, 1 апреля 2009 г.

Оконный менеджер SCREEN + SSH

Введение

Наверное каждый, кто активно пользуется SSH сталкивался с такой проблемой: устанавливаем ряд SSH-соединений с сервером (одно для просмотра логов, другое для редактирования файлов и т.д), работаем... и обрыв связи в самый неподходящий момент. Особенно обидно если соединений было много или в этот момент на сервере была интерактивно запущена важная программа. Скорее всего эта программа будет завершена досрочно: ей будет отправлен сигнал SIGHUP. Разумеется, можно воспользоваться командой nohup и "отвязать" команду от управляющего терминала, но есть более изящное и универсальное решение - оконный менеджер SCREEN!

Описание

SCREEN это полноэкранный консольный оконный менеджер, который мультиплексирует физический терминал между несколькими процессами (обычно, интерактивными оболочками). Иначе говоря, мы получаем несколько shell-ов внутри одного SCREEN-а. Самое замечательное - мы можем в любой момент отключитья от SCREEN-а (преднамерено или же при обрыве связи), а позже подключиться обратно. Программы, запущенные внутри SCREEN-а даже не узнают об этом!

Внутри SCREEN-а можно поставить на загрузку большой файл (через wget, FTP или Torrent), запустить длительную задачу которую нельзя прерывать (обновление операционной системы, компиляция ядра, создание резевной копии данных, посторение индексов большой таблицы и т.д.), запустить любую интерактивную программу (консольный Instant Messenger, программу для online-мониторинга сетевого трафика или загрузки сервера, просмотр растущего лога). Теперь внезапный обрыв связи с сервером не страшен. Все запущенные программы продолжат свою работу как ни в чем не бывало.

Так же SCREEN позволяет создавать любое количество окон, переключаться между ними, помечать их понятными именами, следить за активностью в окнах и многое другое. Краткий перечень основных команд можно посмотреть тут. Приведу лишь самое полезное и ходовое "заклинание" screen:
screen -DR
Опция -D сделает dettach от этого скрина с других машин (точнее других SSH-сессий этого пользователя к данному серверу) и закроет соответствующее SSH-соединение (т.е. сделает logout). Опция -R подключится к существующему (самому свежему) экземпляру скрина, а если его нет - то создаст новый. Таким образом, комбинация опций -DR в подавляющем количестве случаев делает именно то, что нужно на практике.

Ссылки

Для дальнейшего изучения SCREEN можно воспользоваться следующими ссылками:
Статьи и полезные советы:
Ну и конечно же читайте screen(1)!