Автор оригинала: 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 может привести вас к различным решениям для достижения этой цели. Если это что-то важное для вашего проекта, вы можете серьезно рассмотреть все варианты, прежде чем остановиться на правильном решении.
Пожалуйста, не стесняйтесь добавлять свои комментарии и предложения.