С чего начать Первые шаги трек · 15 ступеней
Linux Labs

systemctl — управление службами systemd

5 мин Ubuntu 24.04 · systemd 255

Основной интерфейс к systemd. enable включает автозапуск, start запускает сейчас — это разные операции.

Шпаргалка

11 команд Версия для печати
  • systemctl status nginx --no-pager состояние, без пейджера
  • sudo systemctl status nginx + последние строки журнала
  • systemctl start nginx запустить сейчас
  • systemctl stop nginx остановить сейчас
  • systemctl restart nginx перезапустить (обрывает соединения)
  • systemctl enable --now nginx включить автозапуск и запустить сразу
  • systemctl cat nginx --no-pager unit-файл целиком
  • systemctl edit nginx открыть drop-in override
  • sudo systemctl daemon-reload перечитать юниты после правки
  • systemctl --failed список упавших юнитов
  • sudo journalctl -xeu nginx почему юнит упал

Обзор

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

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

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

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

systemctl status печатает состояние и последние строки журнала службы — но строки журнала видны только с sudo или пользователю из групп adm и systemd-journal. Длинный вывод systemctl открывает в пейджере less (q — выход); --no-pager печатает его сразу в терминал.

Ключи

7

enable и start — независимые операции: enable только прописывает юнит в автозапуск, службу текущего сеанса это не трогает, поэтому после enable без --now служба остаётся неактивной до перезагрузки или явного start. Верно и обратное: start без enable не переживёт перезагрузку.

Ключ Что делает Пример
--now Вместе с enable/disable сразу выполняет start/stop. systemctl enable --now nginx
--failed Показать только юниты в состоянии failed. systemctl --failed
--quiet Без вывода; для скриптов, которые смотрят код возврата. systemctl is-active --quiet nginx
--user Управлять пользовательскими службами текущей сессии, без sudo. systemctl --user status pipewire
-l --full Не обрезать длинные строки статуса и журнала. systemctl status -l nginx
--no-pager Вывести без интерактивного пейджера; удобно в скриптах и логах. systemctl status nginx --no-pager
-H --host host Управлять юнитами на другом хосте по SSH. systemctl -H user@host status nginx

Ничего не найдено. Попробуй запрос короче.

Рецепты

2

Управление

bash
sudo systemctl status nginx --no-pager   # состояние + хвост журнала
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 — полный перезапуск.

Просмотр и юниты

bash
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 — пакетный юнит не трогается, апдейты его не затрут.

Неполадки

7

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

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

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

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

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

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

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

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

Warning: some journal files were not opened due to insufficient permissions.

systemctl status показал состояние службы, но без строк журнала. Журнал служб читают root и группы adm и systemd-journal, у обычного пользователя их нет. Запусти с правами: sudo systemctl status nginx --no-pager или sudo journalctl -u nginx -n 20. Постоянно — членство в группе: sudo usermod -aG systemd-journal имя (действует после нового входа, см. usermod).

Вывод открылся в пейджере, приглашения нет

Длинный вывод status, cat, list-units не помещается в окно терминала, и systemctl показывает его через less: q — выход. Чтобы напечатать сразу в терминал, добавь --no-pager.

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

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

Опасно

stop и restart разрывают текущие соединения к службе немедленно; на проде для служб с graceful-остановкой сначала проверь, есть ли reload. mask запрещает запуск юнита даже как зависимость — сервис не поднимется вместе с другими, пока не снимешь маску (systemctl unmask), и это легко забыть. disable --now для системной службы, от которой зависят другие юниты, роняет и их: проверь systemctl list-dependencies --reverse <unit> заранее.

См. также

  • systemd — Init-система и менеджер служб (PID 1): юниты, цели, зависимости, журналы.
  • journalctl — Чтение журнала systemd (journald) — фильтры по службе, времени, приоритету.
  • Службы под управлением systemd — урок Теории по теме
Загрузка…