~/notes / systemd-python-service

2026-02-24🐧 Linux1 мин0 просм.

systemd: пишем юнит для Python-сервиса

Зачем systemd

Запускать Python-скрипт через screen или nohup — плохая практика. systemd даёт автозапуск, перезапуск при падении, логирование через journald и управление зависимостями.

Минимальный юнит-файл

[Unit]
Description=My Python Service
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/srv/myapp/venv/bin/python app.py
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Сохраняем в /etc/systemd/system/myapp.service.

Управление

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp

Переменные окружения

Не хардкодь секреты в юнит-файле. Используй EnvironmentFile:

[Service]
EnvironmentFile=/etc/myapp/.env
ExecStart=/srv/myapp/venv/bin/python app.py

Логи

journalctl -u myapp -f           # следить в реальном времени
journalctl -u myapp --since today
journalctl -u myapp -n 100

Restart политики

  • on-failure — перезапуск только при ненулевом коде выхода
  • always — перезапуск всегда, даже при systemctl stop
  • on-abnormal — при сигналах и таймаутах

Для production используй on-failure с RestartSec=10 и StartLimitIntervalSec=60.