При настройке серверов часто приходится прибегать к такой замечательной вещи как ssh. Однако при нестабильном интернет-соединении операция, которая выполнялась во время обрыва соединения будет прервана. Для некоторых задач после этого вам придется не только запустить задачу снова, но и произвести чистку (базы данных, файловой системы) после предыдущей (прерванной) задачи. Таким образом ваше потерянное время увеличивается. Это не то, что вы любите, не так ли?

Но от этого недуга есть лекарство. Например, консольный оконный менеджер screen. Если ваши задачи вы запустите в нем, то при обрыве соединения или выходе из сессии текущие задачи будут продолжать выполняться. Как им пользоваться? Попробуем на примере. Допустим вы вошли по ssh на удаленный сервер

ssh root@servername.com

Теперь вам необходимо запустить screen одной простой командой

screen

После этого ва надо нажать пробел или Enter и вы уже под screen. Все что вы запустите после этого будет запущено в экранном менеджере screen.

wget https://web-linux.ru/attaches/jquery.progressbar.1.1.zip

Далее вы можете самостоятельно выйти из screen. Но ваши задачи будут выполняться. Для этого вы можете воспользоваться комбинацией Ctrl+A D.

Когда вы захотите вернуться к той задаче вам надо будет после входа по ssh набрать команду screen -r. И вы войдете в покинутую вами сессию. Если сессий будет несколько (например, кто-то еще открыл другие), то вы сможете войти в свою указвал после ключа r идентификатор сессии.
Для того чтобы увидеть список всех сессий вам необходимо использовать ключ ls

izumeroot@linux-6mjn:~> screen -ls
There are screens on:
        4075.pts-3.linux-6mjn   (Attached)
        13908.pts-8.linux-6mjn  (Detached)
        13925.pts-8.linux-6mjn  (Detached)
3 Sockets in /var/run/uscreens/S-izumeroot.

После чего мы можем зайти так

screen -r 13908

Мы увидим, что программа работала после отключения

izumeroot@linux-6mjn:~> wget https://web-linux.ru/attaches/jquery.progressbar.1.1.zip
--2009-11-23 23:43:15--  https://web-linux.ru/attaches/jquery.progressbar.1.1.zip
Распознаётся web-linux.ru... 92.63.103.169
Устанавливается соединение с web-linux.ru|:80... соединение установлено.
Запрос HTTP послан, ожидается ответ... 200 OK
Длина: 27605 (27K) [application/zip]
Сохраняется в каталог: 'jquery.progressbar.1.1.zip.1'.
 
100%[===================================>] 27 605      --.-K/s   в 0,06s
 
2009-11-23 23:43:16 (436 KB/s) - jquery.progressbar.1.1.zip сохранён [27605/27605]

Так же в оконном менеджере screen можно создавать новые окна и переключаться между ними. Чтобы создать новое коно надо использовать комбинацию Ctrl+A С. После создания нового окна все команды, что вы вводите будут исполняться в этом окне. Переключение между окнами происходит указанием номера окна Ctrl+A 3 (здесь 3 - номер окна) или указанием очередности (next, previous) относительно текущего окна Ctrl+A N и Ctrl+A P. Для того чтобы убить окно используется Ctrl+A K.

Есть возможность слежения за активностью окна. Комбинация Ctrl+A M позволит вам видеть на экране сообщения о то в каких окнах появилась активность (будут отображены номера окон).

На этом возможности screen не кончаются. Чтобы получить информацию о других комбинациях нажмите Ctrl+A ?. Среди возможностей - разделение окна на 2 половины, защита паролем, запись в log-файл, копирование и вставка между окнами, прокрутка и т.д.

Tags: ,

4 Responses to “Screen. Консольный оконный менеджер”

  1.  Александр Says:

    ИМХО гораздо удобнее дать сессии screen осмысленное имя - например:

    screen -S my

    запустить в сессии все, что надо - тот же wget, отключиться ctrl+a, d

    что бы потом подключиться к этой именованной сессии:

    screen -x my

    запомнить осмысленное имя, имхо, проще чем номер.

  2.  Игорь Тельменко Says:

    Спасибо! Прекрасное замечание!

  3.  Валера Says:

    Можно было бы сюда добавить упоминание, что много людей используют скрин что бы работали консольные демоны: rtorrent например.

    ЗЫ:
    Скрин в скрине по умолчанию не работает - это надо учитывать, так как комбинации совпадают ;)

  4.  Nao Says:

    > Скрин в скрине по умолчанию не работает - это надо учитывать, так как комбинации совпадают ;)
    Работает. Просто все специальные комбинации вида ctrl+a перехватывает первый скрин.
    Для того чтобы послать команду второму скрину, нужно к примеру нажать

    ctrl+a, a

    и уже затем кнопку команды.

    Ну и по индукции для последующих уровней вложения скрина…