Запуск застосунку через & чи nohup працює, поки сервер не перезавантажиться, процес не впаде або вам не знадобляться його логи — тоді все розвалюється. systemd — стандартна відповідь: він стартує ваш застосунок при завантаженні, перезапускає його, якщо той помирає, і захоплює його логи. Перетворити скрипт чи бінарник на керований сервіс — це один невеликий файл.
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
Запуск від користувача без прав root обмежує шкоду, якщо застосунок колись скомпрометують.
3. Увімкніть і запустіть його
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
enable змушує його стартувати при завантаженні; --now запускає негайно.
4. Перевірте статус і логи
sudo systemctl status myapp
journalctl -u myapp -f # стежити за живими логами
Щоденні команди
sudo systemctl restart myapp # перезапуск після зміни
sudo systemctl stop myapp # зупинити
sudo systemctl disable myapp # прибрати з автозапуску
Чесні застереження
- Виконуйте
daemon-reloadпісля правки unit-файлу, інакше systemd використає стару версію. - Стежте за циклами падінь. Якщо застосунок падає миттєво,
Restart=alwaysповторюватиме вічно —RestartSec=5розносить спроби; усуньте першопричину за логами. - Віддавайте перевагу
User=без прав root, щоб скомпрометований застосунок не володів усім сервером.
Що далі
systemd-сервіс — це те, як ви тримаєте будь-що запущеним 24/7 — наприклад ШІ-агента, що працює цілодобово чи ретранслятор за власним сервером RustDesk. Якщо ваш застосунок натомість у контейнері, ту саму роль грає --restart unless-stopped у Docker — див. як встановити Docker.
Коментарі
Поки немає коментарів. Будьте першим.