Screen – консольная утилита позволяющая в действующей SSH сессии открывать неограниченное количество независимых виртуальных терминалов (окон). Процессы, выполняемые внутри screen, не прерываются даже при обрыве сессии с сервером.
Утилита screen является отличным инструментом как для новичков в Linux, так и для опытных системных администраторов. Внутри сессии screen можно запускать процессы, которые требуют длительное время на выполнения. В это же время вы всегда можете просто закрыть консоль и запущенный процесс будет выполняться в фоне.
Установка утилиты screen в Linux
Утилита screen по умолчанию установлена в ряде дистрибутивов Linux. В CentOS 8 утилита по умолчанию не установлена, придется доставлять вручную с помощью пакетного менеджера:
# dnf install epel-release -y
— устанавливаем репозиторий EPEL, где размещается данная утилита
# dnf install screen -y
– устанавливаем утилиту
На Debian/Ubuntu установка выполняется так:
# apt install screen
Чтобы посмотреть установленную версию screen, введите команду:
# screen --version
Screen version 4.06.02 (GNU) 23-Oct-17
Запуск и использование screen, работа с сессиями, фоновые процессы
Запустите сессию screen одной командой:
# screen
Чтобы вывести справку по использованию screen, нажмите комбинацию ctrl + a и после этого введите знак вопроса (?).
Вернуться к сессии screen можно через кнопку пробел (space)
Чтобы полностью закрыть терминал screen, нажмите сочетание клавиш ctrl +d:
[screen is terminating]
[root@server ~]#
Чтобы просто выйти из сессии screen, не закрывая ее полностью, используйтекомбинацию:
Ctrl +a d
Если у вас открыта одна сессия screen, вернуться к ней можно с помощью команды:
# screen -r
Проверить список запущенных сессий screen:
# screen -list
Или
# screen -ls
Если сессий несколько, можно получить ID сессии и подключиться к нужной:
# screen -x ID
Или
# screen -r ID
Если вы запускаете несколько сессий screen, то удобнее будет называть их по имени процесса, который там выполняется. Например:
# screen -S rsync
Теперь, если у вас несколько разных сессии именованных screen и вы легко разберетесь в какую из нах вам нужно переключится.
Есть еще очень удобная функция в screen — это разделение экрана (split). Экран можно делить как по горизонтали, так и по вертикали. Например, чтобы разделить экран по горизонтали, в сессии screen нужно нажать ctrl+a S.
Экран разделится на две части. Чтобы переключиться на вторую часть, введите ctrl+a tab и после переключения для активации ctrl+a c. Одновременно в двух частях, можно запускать нужные скрипты или утилиты:
Чтобы разделить экран по вертикали, используйте ctrl+a |
Более того, разделителей может быть неограниченно количество:
Переключаемся по ним все также с помощью ctrl+a tab.
Чтобы закрыть все разделители и остаться в активном окне, используйте ctrl+a Q или просто пропишите в консоли only.
Чтобы убрать умершие или зависшие сессии screen, используйте команду:
# screen -wipe
Еще несколько горячих клавиш screen:
- Создать новое окно:
Ctrl+a c
- Перейти к следующем окну:
Ctrl+a p
- Перейти к предыдущему окну:
Ctrl+a n
- Изменить имя окна:
Ctrl+a a
- Уничтожить окно:
Ctrl+a k
- Перейти к окну с номером 1 (можно использовать цифры от 0 до 9):
Ctrl+a 1
Для тонкой настройки параметров screen можно использовать конфигурационные файлы:
- /etc/screenrc
- ~/.screenrc
Полная справка по screen:
# man screen
Сценарии использования screen в Linux
Чаще всего утилита screen используется для операций, которые выполняются продолжительное время и чувствительны к обрыву сессии. Это могут быть обновления, копирование файлов, создание бэкапа, запуск какого-то скрипта или процесса и многое другое. В моей практике не обходится и дня, чтобы я не воспользовался данной утилитой. Чаще всего, это перенос файлов с одного сервера на другой или объемные обновления пакетов. Например, можно запустить rsync файлов с одного сервера на другой:
# screen -S backup
# rsync -avzr --progress /var/www/site/ IP:/var/www/site/
Или запустите ping до какого-либо ресурса:
В screen можно запустить любой php-скрипт, который постоянно выполняет обмен с какими-либо ресурсами, например, интеграция с сайтом или порталом:
Скрин можно запустить с такими параметрами:
# screen -A -m -d -S B24 /usr/bin/su - bitrix -c "/usr/bin/php /var/www/integration/tools/parser.php"
Мы сразу запускаем терминал и в нем выполняем запуск php-парсер, который постоянно выполняет коннект к порталу Bitrix24. Проверим список запущенных терминалов:
# screen -ls
There is a screen on: 993.B24 (Detached)
И для максимальной надежности, можно новую сессию ssh запускать сразу с включенным screen. В файл /root/.bash_profile добавьте строчку screen:
Теперь при запуске новой сессии у вас сразу будет открываться screen терминал:
В этой статье, мы рассмотрели очень гибкий инструмент screen , который помогает в повседневной работе по администрированию серверов и выполнению различных задач. Применяйте на практике данную статью, расширяйте свои навыки в области системного администрирования Linux.