Ответ
Современный стандарт для управления демонами в Linux — это systemd. Вы описываете службу в виде юнит-файла с расширением .service.
Шаги по созданию службы:
-
Создайте юнит-файл в
/etc/systemd/system/(для системных служб) или~/.config/systemd/user/(для пользовательских).sudo nano /etc/systemd/system/myapp.service -
Пример содержимого для простого демона:
[Unit] Description=My Application Service After=network-online.target # Запускать после поднятия сети Wants=network-online.target [Service] Type=simple # Подходит для большинства демонов User=appuser # Запускать от имени непривилегированного пользователя Group=appgroup ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yaml Restart=on-failure # Перезапускать при аварийном завершении RestartSec=5s # Ждать 5 секунд перед перезапуском Environment="LOG_LEVEL=info" # Переменные окружения LimitNOFILE=65536 # Установить лимит на открытые файлы # Опционально: секция для запуска в chroot или с приватными пространствами имён PrivateTmp=true NoNewPrivileges=true [Install] WantedBy=multi-user.target # В какой "цели" активировать службу -
Активируйте и запустите службу:
# Перезагрузить конфигурацию systemd sudo systemctl daemon-reload # Включить автозагрузку при старте системы sudo systemctl enable myapp.service # Запустить службу сейчас sudo systemctl start myapp.service # Проверить статус sudo systemctl status myapp.service
Ключевые параметры [Service]:
Type:simple(по умолчанию),forking(для демонов, которые сами себя отсоединяют),oneshot(для скриптов, выполняющихся один раз).Restart:on-failure,always,no.User/Group: Критически важно запускать приложения от непривилегированного пользователя в целях безопасности.
В своей работе я всегда добавляю LimitNOFILE и PrivateTmp для изоляции и устанавливаю корректные зависимости (After=) для порядка запуска в системе.