linux-labs

← Практика

Написать systemd-unit для сервиса

Конфигурация службы · Среднее · 30 мин · 170 баллов

Написать systemd-unit для сервиса

На сервере есть готовый демон — скрипт /usr/local/bin/myapp (работает на переднем плане и слушает порт 9000). Сейчас его приходится запускать руками. Нужно оформить его как полноценную службу systemd: с автозапуском и перезапуском при падении.

Задача

Создай unit так, чтобы:

  1. появилась служба myapp (systemctl status myapp её видит);
  2. служба запускала /usr/local/bin/myapp, была активна и слушала порт 9000;
  3. служба была включена в автозапуск (enabled) и перезапускалась при падении (Restart=);
  4. демон работал не от root, а от отдельного пользователя (например myapp).

Подсказки по подходу

  • Unit-файлы служб лежат в /etc/systemd/system/<имя>.service. Минимум секций: [Unit], [Service] (ExecStart=, User=, Restart=), [Install] (WantedBy=multi-user.target).
  • После создания/правки unit обязательно systemctl daemon-reload.
  • ExecStart — абсолютный путь; команда должна работать на переднем плане (systemd сам «демонизирует»).
  • Проверяй результат по кнопке «Проверить».

Всё нужное уже установлено. Интернет на машине отсутствует — и не понадобится.

Подсказки

Подсказка 1

Создай файл /etc/systemd/system/myapp.service. Структура — три секции: [Unit], [Service], [Install].

Подсказка 2

Каркас:

[Unit]
Description=My App
After=network.target

[Service]
ExecStart=/usr/local/bin/myapp
User=myapp
Restart=on-failure

[Install]
WantedBy=multi-user.target

ExecStart — абсолютный путь, команда работает на переднем плане.

Подсказка 3

Применить: sudo systemctl daemon-reload, затем sudo systemctl enable --now myapp. Проверь systemctl status myapp (active), systemctl is-enabled myapp (enabled) и ss -ltnp | grep :9000.

Поднимет вашу личную эфемерную Linux-ВМ для задания — обычно пара секунд. После работы её можно остановить.