linux-labs

Вики / Службы и systemd

systemctl

Команда Ubuntu 24.04 · systemd 255 Службыsystemd

Управление службами systemd — start/stop/restart/status/enable/reload.

systemctl — основной интерфейс к systemd. Управляет жизненным циклом служб и читает их состояние.

Ключевое различие двух понятий:

  • active — служба работает прямо сейчас (start/stop);
  • enabled — служба поднимется при загрузке (enable/disable).

Они независимы: служба может быть enabled, но не active (например, после сбоя).

systemctl status nginx            # состояние + хвост журнала
systemctl start nginx             # запустить сейчас
systemctl stop nginx              # остановить
systemctl restart nginx           # перезапустить (рвёт соединения)
systemctl reload nginx            # перечитать конфиг без обрыва (если служба умеет)
systemctl reload-or-restart nginx # reload, иначе restart
systemctl enable --now nginx      # включить автозапуск И запустить
systemctl disable --now nginx     # выключить автозапуск И остановить
systemctl mask nginx              # запретить запуск вообще (даже вручную/по зависимости)
systemctl is-active --quiet nginx # тихая проверка для скриптов (код возврата)
systemctl is-enabled nginx

reload vs restart: reload просит службу перечитать конфиг (без даунтайма), restart — полный перезапуск.

systemctl list-units --type=service --state=running   # что работает
systemctl list-unit-files --state=enabled             # что в автозапуске
systemctl --failed                                    # что упало
systemctl cat nginx                                   # показать unit-файл целиком
systemctl show nginx -p MainPID,ActiveState,ExecStart # конкретные свойства
systemctl list-dependencies nginx                     # дерево зависимостей
systemctl edit nginx                                  # override-сниппет (drop-in, безопасно)
systemctl edit --full nginx                           # править весь юнит
sudo systemctl daemon-reload                          # после ЛЮБОЙ правки юнита

edit создаёт drop-in в /etc/systemd/system/<unit>.d/override.conf — пакетный юнит не трогается, апдейты его не затрут.

Флаг Смысл
--now вместе с enable/disable — ещё и start/stop
--quiet без вывода (для скриптов, смотрим код возврата)
--user пользовательские службы (без sudo)
--failed только упавшие юниты
--no-pager без интерактивного пейджера
-H host управлять по SSH на другом хосте

is-active врёт после ручного запуска бинарника

systemctl видит только то, что запущено им самим. Запускай через systemctl start, не вручную.

Изменения в юните не применяются

После правки .service нужен sudo systemctl daemon-reload, затем restart. Если правил пакетный юнит руками — используй systemctl edit (drop-in).

Служба «activating» и висит

Смотри Type= в юните и journalctl -xeu <unit>: часто неверный Type=notify без сигнала готовности или зависший ExecStart.

Служба «не стартует и не пишет почему»

systemctl status -l <unit> + journalctl -u <unit> -b (за текущую загрузку). systemctl reset-failed <unit> сбрасывает счётчик рестартов (после починки).

enable не работает — «no installed section»

В юните нет [Install]. Либо это статический юнит, либо включай через зависимость/ target.

systemctl status SVC              # что с ней
systemctl restart SVC            # перезапуск
systemctl enable --now SVC       # автозапуск + старт
systemctl cat SVC ; systemctl edit SVC   # показать / drop-in override
systemctl daemon-reload          # после правки юнита
systemctl --failed               # что упало
journalctl -xeu SVC              # почему упало

См. также