Использование Оконного Менеджера Screen Для Запуска Программ в Фоновом Режиме
22 Mar2006

Иногда, общаясь с Unix-администраторами, я удивляюсь, слыша о том, что они не знают ничего об очень полезной UNIX-утилите – оконном менеджере Screen. Вот почему я решил рассказать здесь о том, как я использую его в своей повседневной работе.

Screen – это полноэкранный оконный менеджер, который разделяет физический терминал между несколькими процессами (обычно – между командными оболочками). Для каждого виртуального терминала существует свой прокручиваемый буфер истории и даже существует механизм copy-and-paste, позволяющий мользователю копировать текст между окнами. Когда уьилита screen запускается в первый раз, она создает пустое окно с командным интерпретатором (shell) внутри или сразу запускает указанную ей при старте команду. После этого она исчезает из поля видимости и позволяет Вам использовать программу так, как Вы делаете это обычно. Далее, в любой момент, вы можете создать новые (полноэкранные) окна с другими программами, убить текущее окно, просмотреть список активных окон, включить или выключить журналирование сессии, копировать текст между окнами, просматривать историю вывода в окне, переключаться между окнами и т.д. Все окна исполняют свои программы совершенно независимо друг от друга. Программы продолжают выполняться в своих окнах даже тогда, когда вы их не видите или даже Ваша сессия отключена от терминала.

В ежедневной админской работе эта утилита может быть полезна для запуска любых основанных на curses задач в фоновом ржиме. Для примера, если Вам нужно запустить полноэкранный клиент для bittorent (BitTornado) 🙂 для скачивания необходимых файлов, Вы не можете использовать обычный метод запуска задач в фоновом режиме при помощи утилиты nohup, т.к. это приложение требует полнофункционального терминала и не может быть запущено в фоне.

Если Вам необходимо запустить какое-либо приложение в фоновом режиме, Вы можете выполнить следующие шаги:

  • Создать пустую сессию при помощи screen:

    1
    # screen -dR some_screen_name

  • Запустить Ваше полноэкранное приложение:

    1
    # btdownloadmany .

  • Отключиться от терминала при помощи нажатия Ctrl+a, d на Вашей клавиатуре.

Теперь Ваша программа работает в полноэкранном фоновом режиме. Вы можете отключиться от сервера или делать все, что захотите. Когда Вам понадобится посмотреть на текущее состояние программы, вы можете просто подключиться к фоновому терминалу при помощи следующей команды:

1
# screen -dR some_screen_name

Если Вы забыли имя фоновой сессии, вам достаточно просто набрать следующую команду чтобы увидеть список всех запущенных терминалов на данном сервере:

1
2
3
4
5
# screen -list
There is a screen on:
        4330.some_screen        (Detached)
1 Socket in /var/run/screen/S-root.
#

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

1
nohup command &> log.file &

.