Вики / Службы и systemd
systemctl
Управление службами 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 # почему упало
См. также
- journalctl — Логи и аудит
- systemd — Службы и systemd
- 📖 Теория: подробнее