Linux Labs

Пакеты, службы, журналы / Ступень 8 из 13

Свой юнит службы и применение изменений

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 2 из 7 · теория · 6 мин

Из чего состоит файл юнита

Файл юнита — настройка для systemd, а не сценарий оболочки. В этом шаге — его секции и главные строки.

Вот файл lab-worker целиком:

ini
[Unit]
Description=Linux Labs worker

[Service]
Type=exec
User=student
ExecStart=/usr/bin/sleep 86400
Restart=no

[Install]
WantedBy=multi-user.target

Строки разложены по секциям:

Секция Что в ней
[Unit] описание службы и порядок запуска среди других юнитов
[Service] как запускать программу: Type, User, ExecStart, Restart
[Install] к какой цели подключать службу при enable — WantedBy

User — от какого пользователя запускать программу; без этой строки системная служба работает от root. Для своей службы обычно заводят отдельную учётную запись без входа в систему: sudo useradd -r -s /usr/sbin/nologin myapp (useradd). Type=exec значит, что запуск удался, когда программа начала выполняться.

ExecStart systemd выполняет сам, без оболочки. Поэтому путь к программе в нём полный, а |, >, & и ~ там не работают: программа получит их как обычные слова.

Проверь себя 1 вопрос

В юните службы написали ExecStart=/usr/bin/echo ready > /tmp/ready. Что будет после запуска службы?

  • systemd не разбирает > и не спорит с ним: он запускает /usr/bin/echo и отдаёт ему все слова строки.

  • > понимает оболочка, а systemd запускает программу без неё: echo получит > и /tmp/ready как обычные слова.

  • У службы нет терминала: то, что программа печатает, systemd пишет в журнал службы.

systemd запускает программу из ExecStart без оболочки, поэтому > и путь достаются echo как слова, и она печатает их в журнал службы. Когда оболочка правда нужна, её вызывают явно: ExecStart=/bin/sh -c '…'.

Главное в шаге

  • Секция [Service] говорит, как запускать: ExecStart — программа без оболочки, User — от кого, Restart — когда запускать заново.
  • [Install] нужна для enable: WantedBy называет цель, к которой подключится служба.
Ubuntu 24.04
Загрузка…