Демон, также известный как служба, — это программа или задание, которое обычно работает в фоновом режиме в нашей системе Linux и выполняет определенную задачу. Некоторыми распространенными примерами демона являются sshd.service (протокол SSH) и ftpd.service (протокол FTP).

Сценарий

В этом блоге мы рассмотрим следующий сценарий:

У нас есть скрипт Python (testdaemon.py), который запускается каждые 30 секунд и записывает в файл.

Нам нужно, чтобы этот сценарий продолжал работать в фоновом режиме и никогда не останавливался. Есть много возможных способов сделать это, например, запустить скрипт с опцией nohup или создать демона (что мы и собираемся сделать).

Создание демона

Первым шагом является создание файла в папке /etc/systemd/system. Файл должен иметь расширение ’.service’. Мы будем считать, что имя файла — ‹‹testdaemon.service›.

Следующим шагом будет заливка файла, как показано на картинке ниже. Нам нужна следующая информация: DIRECTORY_OF_THE_PYTHON_SCRIPT, PATH_TO_PYTHON_EXECUTABLE SCRIPT.PY.

Чтобы получить PATH_TO_PYTHON_EXECUTABLE, мы можем использовать команду: python -c "import os; print(os.environ['_'])"

Затем мы вводим в файл testdaemon.service следующий код и сохраняем файл:

[Unit]
Описание=”Данные процесса”

[Сервис]
Restart=always
WorkDirectory=DIRECTORY_OF_THE_PYTHON_SCRIPT
ExecStart=PATH_TO_PYTHON_EXECUTABLE SCRIPT.PY

[Установить]
WantedBy=многопользовательская цель

Ниже приведен пример:

На этом этапе демон готов. Теперь нам нужно перезагрузить утилиту systemctl и запустить наш демон.

С этого момента наш демон готов и работает. в конечном итоге мы можем проверить его статус или остановить его с помощью команды systemctl status/stop testdaemon.service. Также мы можем наблюдать, что скрипт в данный момент записывает в файл.

Заключение

Можно преобразовать простой скрипт Python, чтобы он работал как демон Linux. Со временем управление им становится простым, поскольку мы можем запускать или останавливать его, а также проверять его статус.

Надеюсь, этот небольшой блог был полезен. Наслаждаться….