Использование утилиты screen в Linux

Screen – консольная утилита позволяющая в действующей SSH сессии открывать неограниченное количество независимых виртуальных терминалов (окон). Процессы, выполняемые внутри screen, не прерываются даже при обрыве сессии с сервером.

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

Установка утилиты screen в Linux

Утилита screen по умолчанию установлена в ряде дистрибутивов Linux. В CentOS 8 утилита по умолчанию не установлена, придется доставлять вручную с помощью пакетного менеджера :

# dnf install epel-release -y устанавливаем репозиторий EPEL , где размещается данная утилита

# dnf install screen -y – устанавливаем утилиту

установка screen в linux

На Debian/Ubuntu установка выполняется так:

# apt install screen

Чтобы посмотреть установленную версию screen, введите команду:

# screen --version

Screen version 4.06.02 (GNU) 23-Oct-17

Запуск и использование screen, работа с сессиями, фоновые процессы

Запустите сессию screen одной командой:

# screen

запуск утилиты screen в linux

Чтобы вывести справку по использованию screen , нажмите комбинацию ctrl + a и после этого введите знак вопроса ( ? ).

горячие клавиши screen

Вернуться к сессии 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 , то удобнее будет называть их по имени процесса, который там выполняется. Например:

# screen -S rsync

изменить название сесии screen

Теперь, если у вас несколько разных сессии именованных screen и вы легко разберетесь в какую из нах вам нужно переключится.

Есть еще очень удобная функция в screen — это разделение экрана ( split ). Экран можно делить как по горизонтали, так и по вертикали. Например, чтобы разделить экран по горизонтали, в сессии screen нужно нажать ctrl+a S .

Экран разделится на две части. Чтобы переключиться на вторую часть, введите ctrl+a tab и после переключения для активации ctrl+a c . Одновременно в двух частях, можно запускать нужные скрипты или утилиты:

screen разделить экран на 2 части

Чтобы разделить экран по вертикали, используйте ctrl+a |

Более того, разделителей может быть неограниченно количество:

screen несколько экранов

Переключаемся по ним все также с помощью 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 до какого-либо ресурса:

запуск ping в отдельном screen

В screen можно запустить любой php-скрипт, который постоянно выполняет обмен с какими-либо ресурсами, например, интеграция с сайтом или порталом:

запуск php скрипта в screen

Скрин можно запустить с такими параметрами:

# 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:_x000D_993.B24 (Detached)

И для максимальной надежности, можно новую сессию ssh запускать сразу с включенным screen. В файл /root/.bash_profile добавьте строчку screen :

запуск screen из bash_profile

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

автоматический запуск терминала screen в новой сессии linux

В этой статье, мы рассмотрели очень гибкий инструмент screen , который помогает в повседневной работе по администрированию серверов и выполнению различных задач. Применяйте на практике данную статью, расширяйте свои навыки в области системного администрирования Linux.

EnglishRussianUkrainian