Работа со screen
Введение
Работа терминала устроена таким образом, что при его закрытии также остановят свою работу процессы, которые не запущены в фоне. Если провести аналогию с Windows, то это, то же самое что запустить, например, установку Google Chrome, но во время инсталляции закрыть установочную программу. В случае с Windows мы просто сворачиваем окно такой программы, чтобы оно нам не мешало. Что же касается серверов с Linux, то в терминале мы всё выполняем с помощью команд и нет возможности свернуть окна по причине их отсутствия.
Чтобы на сервере запустить программу в фоне и оставить её там работать, используют разные подходы. Например, можно создать сервисный файл и запустить его, а потом просто при помощи специальных команд проверять логи. А можно воспользоваться сторонними программами, которые создают сессии и оставляют их работать в фоновом режиме. Наиболее распространенные решения — это Tmux и Screen, в этой статье познакомимся со вторым.
Screen — это утилита для управления сессиями терминала, позволяющая запускать процессы в фоне и восстанавливать сессии после отключения.
Установка и полезные команды
На сервер c Ubuntu утилита Screen устанавливается буквально двумя командами
sudo apt update sudo apt install screen
Для создания сессии воспользуйтесь командой ниже, где имя_сессии — это желаемое имя для сессии, которую вы хотите создать (используйте только цифры и латинские буквы). После использования этой команды вы автоматически попадаете в сессию, то есть это как новое “окно” внутри терминала, но интерфейс не поменяетсяBashCopy
screen -S имя_сессии
Внутри сессии вы можете выполнять команды и запускать всё то, что и в основном “окне” командной строки.
- Для выхода из сессии можно использовать комбинацию клавиш
Ctrl+A, затем D
, в некоторых пользователей на этом этапе возникают проблемы — они не могут выйти из сессии или вовсе случайно закрывают её. Но есть альтернатива, из сессии можно выйти при помощи команды ниже. Но если в сессии запущена нода и идут логи, то такой командой выйти не получиться и всё же придется воспользоватьсяCtrl+A, затем D
,
screen -d
Ctrl+A, затем D = screen -d, но это скорее вопрос привычки, чем необходимости. Выходить из сессии при помощи комбинации намного быстрее, но для новичков выход при помощи команды будет более надежным вариантом.
Если вам нужно повторно зайти в сессию после выхода, то используйте команду ниже, где имя_сессии — это имя сессии, которую вы создавали ранее
screen -r имя_сессии
Частая ошибка новичков — это создание множества сессий с одинаковыми названиями по причине невнимательности. Дело в том, что новички часто путают команды создания сессии (флаг -S) и открытия уже существующей сессии (флаг -r). Проблема в том, что Screen разрешает создавать много сессий с одинаковыми названиями, так как он всё равно присваивает цифровой идентификатор (ID) перед буквенным именем, пример на скриншоте ниже
Чтобы увидеть список уже запущенных сессий, воспользуйтесь командой ниже
screen -ls
Понятно, что такое количество сессий с одинаковыми названиями нам не нужны, для удаления сессий используют следующую команду, где имя_сессии — это имя сессии, которую вы хотите удалить
screen -S имя_сессии -X quit
Если в списке сессия с уникальным именем, то можно просто написать, например, screen -S forto -X quit
, но если есть хотя бы два одинаковых имени, то придется указывать ID — screen -S 3290953.forto -X quit
или screen -S 3290953 -X quit
Но командная строка тем и хороша, что практически всё можно автоматизировать. Если воспользоваться командой ниже, то она удалит все сессии с одинаковыми именами, где имя_сессии — это имя, присвоенное для многих сессий, которые вы хотите удалить
screen -ls | grep "имя_сессии" | awk '{print $1}' | xargs -I {} screen -S {} -X quit
screen -ls
: выводит список всех сессий.grep "forto"
: фильтрует список, оставляя только сессии с названием "имя_сессии
".awk '{print $1}'
: извлекает идентификаторы (ID) этих сессий.xargs -I {} screen -S {} -X quit
: передает каждый ID в командуscreen -S <ID> -X quit
, которая завершает соответствующую сессию.
Шпаргалка
Все команды для управления Screen довольно простые и их легко запомнить уже после нескольких раз использования, но на всякий случай вот шпаргалка:
Заключение
Более подходящий вариант для работы с нодами через командную строку — это их запуск через сервисный файл, но не всегда проекты предоставляют такую возможность. На самом деле Screen — это неплохая альтернатива, но всё-таки рекомендуем проверять работу запущенных сессий (минимум один раз в 1-2 дня), так как через сбой на сервере они могут закрыться, а Screen не умеет самостоятельно повторно их открывать.