Linux Labs

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

Службы под управлением systemd

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

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

Файл юнита

Поднимать ли службу после сбоя, systemd читает в её описании. В этом шаге — где лежит описание и какие строки в нём главные.

Как запускать службу, systemd узнаёт из файла юнита. Путь к нему стоит в строке Loaded сводки systemctl status, а целиком файл печатает systemctl cat. Вот что systemctl cat cron печатает на учебной машине:

ini
# /usr/lib/systemd/system/cron.service
[Unit]
Description=Regular background program processing daemon
Documentation=man:cron(8)
After=remote-fs.target nss-user-lookup.target

[Service]
EnvironmentFile=-/etc/default/cron
ExecStart=/usr/sbin/cron -f -P $EXTRA_OPTS
IgnoreSIGPIPE=false
KillMode=process
Restart=on-failure
SyslogFacility=cron

[Install]
WantedBy=multi-user.target

Этот файл поставил пакет cron: dpkg -S /usr/lib/systemd/system/cron.service из модуля о пакетах печатает cron: /usr/lib/systemd/system/cron.service.

Файл делится на секции в квадратных скобках, в каждой — строки ключ=значение. Две строки секции [Service] объясняют то, что ты увидел:

  • ExecStart — какую программу запускать. У cron это /usr/sbin/cron -f -P.
  • Restart — запускать ли службу заново, когда её процесс завершился. on-failure значит «после сбоя»: процесс вышел с ненулевым кодом, убит сигналом или не уложился во время.

Строки с # в начале — комментарии, systemd их пропускает. Файл nginx длинный, поэтому его печатают с --no-pager — иначе systemctl cat откроет его в пейджере:

bash
systemctl cat nginx --no-pager

Строки Restart в файле nginx нет. Тогда действует значение по умолчанию, no: после сбоя systemd службу заново не запускает, и она остаётся failed.

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

В юните службы Restart=on-failure. Её программа закончила работу и вышла с кодом 0. Что сделает systemd?

  • on-failure срабатывает после сбоя: ненулевого кода, сигнала или превышения времени. Код 0 значит, что программа закончила штатно.

  • Код 0 — не сбой: отмечать службу как failed не за что, и on-failure не срабатывает.

  • Restart с автозапуском не связан: systemctl is-enabled печатает то же, что и до завершения программы.

on-failure перезапускает службу после сбоя — ненулевого кода завершения, сигнала или превышения времени. Программа, вышедшая с кодом 0, закончила работу штатно, и служба остаётся inactive.

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

  • Описание службы — файл юнита: путь к нему стоит в строке Loaded, целиком файл печатает systemctl cat.
  • ExecStart — программа службы, Restart — запускать ли её заново; без Restart упавшая служба остаётся failed.
Ubuntu 24.04
Загрузка…