Запускаем процессы в фоне с помощью screen
В терминале, мы запускаем процессы в текущей сессии. Если закрыть окно, выполнение процесса будет завершено, а результат будет утерян. Это является проблемой при выполнении ресурсоемких задач, которые занимают продолжительное время. Так же, любая запущенная команда блокирует терминал до своего завершения и мы не можем выполнять другие операции.
Для решения этой проблемы существует терминальный менеджер screen. Он запускает процессы в собственных сессиях, которые не завершаются при выходе пользователя из системы. Таким образом мы можем закрыть терминал, оставив какие-то процессы работающими в фоне, и в любой момент вернуться к ним.
Помимо выполнения долгих скриптов, screen можно использовать для запуска программ, которые должны работать на сервере в фоне. Для запуска фоновых процессов на продакшн-сервере лучше использовать утилиту supervisor, которая создана специально для этих задач, но screen проще и удобнее для тестирования и отладки приложений.
В этой статье рассказывается о базовых командах, которые могут пригодиться для запуска ваших процессов. Подробную документацию по screen можно найти на официальном сайте.
Установка
Чтобы установить screen, воспользуйтесь менеджером пакетов для вашей системы
apt install screen
Работа с сессиями
Попробуем создать новую сессию:
screen -S my_first_screen_session
Будет запущена новая сессия, как если бы вы авторизовались на сервере в обычной tty-консоли. В ней можно запустить какой-то процесс, «свернуть» ее и продолжить работать в консоли.
Чтобы «свернуть» сессию, нажмите Ctrl+A, затем d. Первый шорткат переведет скрин режим принятия команд, а команда d
(disconnect) отключится от текущей сессии, оставив ее запущенной в фоне.
Чтобы вернуться к последней подключенной сессии, введите команду
screen -r
screen -list
screen -r mc
screen -S mc -X quit
Запуск процесса в фоне
Чтобы сразу запустить в скрине какой-то процесс, достаточно передать команду на его выполнение при запуске сессии
screen -S session_name command
Например так:
screen -S mc python main.py
Перед вами откроется новый скрин, где будет выполняться переданная команда. Теперь можно свернуть скрин и процесс продолжит выполнение. Ctrl+A, D.
Запуск процесса в новой сессии в фоне
Чтобы запустить скрин сразу в свернутом виде, нужно дополнительно передать параметры -dm
screen -dmS session_name command
Рекомендуется либо заранее проверить, что переданная команда запускается корректно. Иначе вы увидите только сообщение о том, что скрин завершил работу.
[screen is terminating]
Заключение
Screen позволяет использовать терминальные сессии, которые можно «сворачивать». С его помощью можно запускать в фоне ресурсоемкие задачи и процессы, которые должны быть запущены постоянно.