- Posted in: Admin-tips
[lang_en]
Sometimes, when I speaking with Unix admins, I wondering, that they did not know anything about very useful UNIX tool – Screen window manager. That is why i decided to describe how I am using it in my job.
[/lang_en]
[lang_ru]
Иногда, общаясь с Unix-администраторами, я удивляюсь, слыша о том, что они не знают ничего об очень полезной UNIX-утилите – оконном менеджере Screen. Вот почему я решил рассказать здесь о том, как я использую его в своей повседневной работе.
[/lang_ru]
[lang_en]
Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells. There is a scroll-back history buffer for each virtual terminal and a copy-and-paste mechanism that allows the user to move text regions between windows. When screen is called, it creates a single window with a shell in it (or the specified command) and then gets out of your way so that you can use the program as you normally would. Then, at any time, you can create new (full-screen) windows with other programs in them (including more shells), kill the current window, view a list of the active windows, turn output logging on and off, copy text between windows, view the scroll-back history, switch between windows, etc. All windows run their programs completely independent of each other. Programs continue to run when their window is currently not visible and even when the whole screen session is detached from the users terminal.
In every day Unix admin job, this tool may be interesting for running some curses-based jobs in background. For example, if you need to run full-screen bittorent client (BitTornado) 🙂 to download some files, you can not use generic way to run background jobs with nohup tool, because this software requires full-featured virtual terminal and can not be runned in background.
If you need to run some software in background, you need to do following steps:
- Create empty screen session:
1# screen -dR some_screen_name - Run your full-screen program:
1# btdownloadmany . - Detach from terminal by pressing Ctrl+a, d on your keyboard.
Now, your program is being executed in full-screen background session. You can disconnect from the server and do anything you want. When you will need to look at its state, you can simply attach to background screen by typing:
1 | # screen -dR some_screen_name |
If you forgot your background session name, you can look at the sessions list by the following command:
1 2 3 4 5 | # screen -list There is a screen on: 4330.some_screen (Detached) 1 Socket in /var/run/screen/S-root. # |
As you see here, screen utility can be very useful for running background jobs on remote UNIX servers and, even, can replace old job backgrounding method with ugly constructions like
1 | nohup command &> log.file & |
.
[/lang_en]
[lang_ru]
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 & |
.
[/lang_ru]