Запуск скрипта Python как "демона" (службы) в системе Linux
Внимание
В данной заметке рассматривается пример создания "демона" (службы) с использованием микрофреймворка flask. Справочная информация по работе с микрофремворком находиться тут.
Также, для выполнения указанных команд необходимо чтобы пользователь системы был добавлен в группу Администраторов системы (sudoers).
Установка Flask и создание скрипта
Установим пакет flask:
python3 -m pip install flaskСоздадим скрипт app.py:
nano /home/<USER_NAME>/test/app.pyНапишем простое приложение с использованием микрофреймворка flask:
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)Для проврки корректности работы скрипта выполним команду:
python3 /home/<USER_NAME>/test/app.pyВ терминале должна отобразится информация о том, что мы используем локальных сервер в режиме "debug" и о том, что его не рекомендуется использовать в продакшене. Открыв ссылку в браузере 127.0.0.1:5000 должна открыться страница с надписью "Hello World". Для завершения работы скрипта можно использовать комбинацию клавиш Ctrl+C и подтвердить действие нажатием клавиши Enter
Создание service-файла и проверка его корректности
Создадим service-файл для запуска службы:
sudo nano /etc/systemd/system/app.serviceЗапишем следующий код:
[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Проверим файл на корректность:
sudo systemd-analyze verify app.serviceЕсли вывод команды пустой, значит файл заполнен правильно
Запуск службы
Перечитываем конфигурацию всех служб:
sudo systemctl daemon-reloadЗапускаем службу:
sudo systemctl start app.serviceДобавляем службу в автозапуск системы:
sudo systemctl enable app.serviceСовет
Также можно одной командой запустить и добавить в автозапуск службу:
sudo systemctl enable --now app.serviceВсё. Мы создали простой скрипт с использованием микрофреймворка Flask и обеспечили его запуск как "демона" (службы)
Полезно
Посмотреть информацию о службе можно командой
service app statusТакже подробый журнал доступен по команде
journalctl -u app.serviceПерезапустить службу можно командой
sudo service app restartЗапустить/Остановить службу можно командой
sudo service app start
sudo service app stopУбрать службу из автозагрузки можно командой
sudo systemctl disable app.service