Skip to content

Запуск скрипта Python как "демона" (службы) в системе Linux

Внимание

В данной заметке рассматривается пример создания "демона" (службы) с использованием микрофреймворка flask. Справочная информация по работе с микрофремворком находиться тут.

Также, для выполнения указанных команд необходимо чтобы пользователь системы был добавлен в группу Администраторов системы (sudoers).

Установка Flask и создание скрипта

Установим пакет flask:

bash
python3 -m pip install flask

Создадим скрипт app.py:

bash
nano /home/<USER_NAME>/test/app.py

Напишем простое приложение с использованием микрофреймворка flask:

python
from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['GET'])
def index():
    return "Hello World"

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000, debug=True)

Для проврки корректности работы скрипта выполним команду:

bash
python3 /home/<USER_NAME>/test/app.py

В терминале должна отобразится информация о том, что мы используем локальных сервер в режиме "debug" и о том, что его не рекомендуется использовать в продакшене. Открыв ссылку в браузере 127.0.0.1:5000 должна открыться страница с надписью "Hello World". Для завершения работы скрипта можно использовать комбинацию клавиш Ctrl+C и подтвердить действие нажатием клавиши Enter

Создание service-файла и проверка его корректности

Создадим service-файл для запуска службы:

bash
sudo nano /etc/systemd/system/app.service

Запишем следующий код:

ini
[Unit]
Description=Test Python script daemon
After=multi-user.target

[Service]
Type=simple
WorkingDirectory=/home/<USER_NAME>/test/
ExecStart=/usr/bin/python3 app.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

Проверим файл на корректность:

bash
sudo systemd-analyze verify app.service

Если вывод команды пустой, значит файл заполнен правильно

Запуск службы

Перечитываем конфигурацию всех служб:

bash
sudo systemctl daemon-reload

Запускаем службу:

bash
sudo systemctl start app.service

Добавляем службу в автозапуск системы:

bash
sudo systemctl enable app.service

Совет

Также можно одной командой запустить и добавить в автозапуск службу:

bash
sudo systemctl enable --now app.service

Всё. Мы создали простой скрипт с использованием микрофреймворка Flask и обеспечили его запуск как "демона" (службы)

Полезно

Посмотреть информацию о службе можно командой

bash
service app status

Также подробый журнал доступен по команде

bash
journalctl -u app.service

Перезапустить службу можно командой

bash
sudo service app restart

Запустить/Остановить службу можно командой

bash
sudo service app start
sudo service app stop

Убрать службу из автозагрузки можно командой

bash
sudo systemctl disable app.service

Создано с VitePress