Инженерные заметки

Свой фоновый сервис на systemd

Если у вас есть скрипт или бинарь, который должен работать постоянно и подниматься после перезагрузки, не нужно ни tmux, ни самописных init-скриптов — оформите его как systemd-сервис.

Unit-файл

Кладём описание в /etc/systemd/system/myapp.service:

[Unit]
Description=My background worker
After=network-online.target

[Service]
WorkingDirectory=/opt/myapp
EnvironmentFile=/opt/myapp/.env
ExecStart=/usr/bin/python3 -m myapp
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Restart=always с RestartSec поднимет процесс, если он упадёт; EnvironmentFile подтянет переменные окружения; WantedBy=multi-user.target включит автозапуск при загрузке.

Управление

systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp

Логи теперь централизованы и доступны через journald — с фильтром по юниту и хвостом в реальном времени:

journalctl -u myapp -f --since "10 min ago"

Так вы получаете автозапуск, перезапуск при сбое и единое место для логов без единой строчки своего кода для демонизации.


← ко всем статьям