Рубрики
Без рубрики

Как запустить скрипт в фоновом режиме?

Простая демонстрация того, как запустить скрипт в качестве фонового процесса в среде Debian.

Автор оригинала: Saket Shukla.

Мы все согласны с тем, что иногда мы создаем материал как побочный проект, чтобы проверить вещи и в конечном итоге выбросить их, прежде чем воплотить в более крупном проекте. Более того, мы хотим минимизировать потребление ресурсов на этой стороне приключения и при этом достичь максимальной близости к окружающей среде, в которой он должен использоваться.

Одним из таких сценариев может быть сценарий, который должен выполняться в фоновом режиме на вашей локальной системе или сервере. Сценарий может быть предназначен для демона или веб – службы. Хотя у вас может быть правильная среда, настроенная для обработки зависимостей для этого сценария в рабочей среде, никто не хочет проходить настройку и настройку среды для тестирования одного единственного сценария в изоляции.

Вы когда-нибудь задумывались, как мы можем заставить этот сценарий, который вы только что создали, работать в фоновом режиме? Ваши причины для создания такого сценария могут быть разными, но если вы ищете простой способ выйти из этой ситуации, это для вас.

Для достижения этой цели в системе Debian мы будем использовать Systems (Проверьте, основана ли ваша ОС на Debian ). Systems является системным и сервисным менеджером по умолчанию post Debian Jessie и должен быть доступен из коробки ( reference ). Если нет, то вы можете пройти через шаги установки .

Кроме того, чтобы проверить, является ли ваш init по умолчанию systemd, вы можете использовать этот удобный скрипт здесь

# sudo ps -p 1 -o comm=systemd

Давайте погрузимся и создадим фоновый процесс. Я предполагаю, что сценарий, который вы хотите запустить в фоновом режиме, уже обрабатывает логику, чтобы повторить себя без выхода (если нет, то процесс закончится вашим сценарием). Кроме того, этот пример построен с использованием python, так что для других языков вам придется заполнить недостающие части самостоятельно.

Первое, что вы хотите знать, – это где находятся системные процессы. Вы можете найти их, перейдя по ссылке:

# cd /etc/systemd/system/

Давайте создадим наш собственный файл сервиса (я назвал его bg_process ) и добавим в него некоторый код:

# sudo touch bg_process.service
# sudo vim bg_process.service


[Unit]
Description=bg_process
After=syslog.target network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/python /var/www/scripts/my_bg_script.py
Restart=on-abort

[Install]
WantedBy=multi-user.target

Единственный параметр, который необходимо изменить, чтобы сделать приведенный выше скрипт функциональным для вас, – это ExecStart . В общем, ваш ExecStart будет выглядеть примерно так:

ExecStart= 

Если вы используете виртуальную среду , просто замените путь python по умолчанию на путь вашей среды.

Большинство приведенных выше разделов не требуют пояснений, но если вы хотите узнать больше об используемых параметрах и о том, какие другие опции вам доступны, вы можете прочитать эту аккуратную документацию из Red Hat .

Единственное, что осталось сделать, это дать системе знать, что у нас есть новая служба для запуска и запуска. Двигаясь вперед, ваш скрипт будет инициализироваться при каждой загрузке системы.

# sudo systemctl daemon-reload
# sudo service bg_process start

И вуаля, ваш сценарий теперь является фоновым сервисом. Чтобы проверить его состояние вы можете в любое время запустить:

# sudo service bg_process status

Простой поиск в Google или просмотр stackoverflow может привести вас к различным решениям для достижения этой цели. Если это что-то важное для вашего проекта, вы можете серьезно рассмотреть все варианты, прежде чем остановиться на правильном решении.

Пожалуйста, не стесняйтесь добавлять свои комментарии и предложения.