Пускането на приложение с & или nohup е наред, докато сървърът не се рестартира, процесът не се срине, или не искаш да намериш логовете му — тогава се разпада. systemd е стандартният отговор: той стартира приложението ти при boot, рестартира го, ако умре, и хваща логовете му. Превръщането на скрипт или binary в управлявана услуга е един малък файл.
1. Напиши unit файл
Създай /etc/systemd/system/myapp.service:
[Unit]
Description=My application
After=network.target
[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Настрой ExecStart, WorkingDirectory и User към приложението си. Restart=always е това, което го държи живо.
2. Създай специален потребител (препоръчано)
sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp
Пускането като non-root потребител ограничава щетите, ако приложението някога бъде компрометирано.
3. Включи и стартирай го
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
enable го кара да стартира при boot; --now го стартира незабавно.
4. Провери статус и логове
sudo systemctl status myapp
journalctl -u myapp -f # follow live logs
Ежедневни команди
sudo systemctl restart myapp # restart after a change
sudo systemctl stop myapp # stop it
sudo systemctl disable myapp # stop starting on boot
Честни предупреждения
- Пусни
daemon-reloadслед редактиране на unit файл, или systemd използва старата версия. - Внимавай за crash loops. Ако приложението се проваля мигновено,
Restart=alwaysопитва вечно —RestartSec=5разрежда опитите; поправи основната грешка през логовете. - Предпочети non-root
User=, така че компрометирано приложение да не притежава целия сървър.
Следващи стъпки
systemd услуга е как държиш каквото и да е работещо 24/7 — например AI агент, който работи денонощно или relay-я зад self-hosted RustDesk сървър. Ако приложението ти е контейнеризирано вместо това, --restart unless-stopped на Docker играе същата роля — виж как да инсталираш Docker.
Коментари
Още няма коментари. Бъди първият.