Запускаем процессы в фоне с помощью screen
В терминале, мы запускаем процессы в текущей сессии. Если закрыть окно, выполнение процесса будет завершено, а результат будет утерян. Это является проблемой при выполнении ресурсоемких задач, которые занимают продолжительное время. Так же, любая запущенная команда блокирует терминал до своего завершения и мы не можем выполнять другие операции.
Для решения этой проблемы существует терминальный менеджер screen. Он запускает процессы в собственных сессиях, которые не завершаются при выходе пользователя из системы. Таким образом мы можем закрыть терминал, оставив какие-то процессы работающими в фоне, и в любой момент вернуться к ним.
Помимо выполнения долгих скриптов, screen можно использовать для запуска программ, которые должны работать на сервере в фоне. Для запуска фоновых процессов на продакшн-сервере лучше использовать утилиту supervisor, которая создана специально для этих задач, но screen проще и удобнее для тестирования и отладки приложений.
В этой статье рассказывается о базовых командах, которые могут пригодиться для запуска ваших процессов. Подробную документацию по screen можно найти на официальном сайте.
Установка¶
Чтобы установить screen, воспользуйтесь менеджером пакетов для вашей системы
Работа с сессиями¶
Попробуем создать новую сессию:
Будет запущена новая сессия, как если бы вы авторизовались на сервере в обычной tty-консоли. В ней можно запустить какой-то процесс, «свернуть» ее и продолжить работать в консоли.
Чтобы «свернуть» сессию, нажмите Ctrl+A, затем d. Первый шорткат переведет скрин режим принятия команд, а команда d
(disconnect) отключится от текущей сессии, оставив ее запущенной в фоне.
Чтобы вернуться к последней подключенной сессии, введите команду
Для того, чтобы получить список запущенных сессий от имени текущего пользователя, добавьте ключ -ls или -list Вы можете подключиться к определенной сессии по её имени (идентификатору), добавив его в конце команды Чтобы завершить определенную сессию, можно отправить в нее выполнение команды «quit»Запуск процесса в фоне¶
Чтобы сразу запустить в скрине какой-то процесс, достаточно передать команду на его выполнение при запуске сессии
Например так:
Перед вами откроется новый скрин, где будет выполняться переданная команда. Теперь можно свернуть скрин и процесс продолжит выполнение. Ctrl+A, D.
Запуск процесса в новой сессии в фоне¶
Чтобы запустить скрин сразу в свернутом виде, нужно дополнительно передать параметры -dm
Рекомендуется либо заранее проверить, что переданная команда запускается корректно. Иначе вы увидите только сообщение о том, что скрин завершил работу.
Заключение¶
Screen позволяет использовать терминальные сессии, которые можно «сворачивать». С его помощью можно запускать в фоне ресурсоемкие задачи и процессы, которые должны быть запущены постоянно.