Linux

Управление systemd-сервисами: полное руководство по запуску, остановке и настройке

В этом гайде вы освоите основные команды systemctl для управления службами в современных дистрибутивах Linux. Вы научитесь запускать, останавливать, включать в автозагрузку сервисы и диагностировать проблемы.

Обновлено 16 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+CentOS/RHEL 8+Debian 10+Fedora

Введение / Зачем это нужно

Systemd стал стандартом для управления службами и процессами в большинстве современных дистрибутивов Linux (Ubuntu, Fedora, CentOS/RHEL 8+, Debian 10+). Понимание его основ — обязательный навык для системного администратора и разработчика, работающего с серверами.

Это руководство даст вам практические навыки для повседневного управления сервисами: запуск, остановка, настройка автозапуска и диагностика сбоев. Вы сможете уверенно работать с такими командами, как systemctl и journalctl.

Требования / Подготовка

  • Дистрибутив Linux с системой инициализации systemd (проверьте: pidof systemd).
  • Доступ к терминалу с правами sudo (для управления системными службами).
  • Базовое понимание командной строки.

Шаг 1: Основные команды управления состоянием службы

Systemctl — основной инструмент взаимодействия с systemd. Вот ключевые команды для управления состоянием:

  • Запуск службы:
    sudo systemctl start имя_службы.service
    
    Пример: sudo systemctl start nginx
  • Остановка службы:
    sudo systemctl stop имя_службы.service
    
  • Перезапуск службы (мягкий):
    sudo systemctl restart имя_службы.service
    
  • Принудительная перезагрузка (kill и запуск):
    sudo systemctl try-restart имя_службы.service
    

    💡 Совет: Для веб-серверов (nginx, apache) после изменения конфигурации используйте reload (sudo systemctl reload nginx), чтобы перечитать конфиг без разрыва соединений.

Шаг 2: Управление автозагрузкой (включение/отключение)

Чтобы служба автоматически запускалась при загрузке системы, её нужно включить.

  • Включить автозапуск:
    sudo systemctl enable имя_службы.service
    
    Эта команда создаёт символьную ссылку на unit-файл в каталоге /etc/systemd/system/.
  • Отключить автозапуск:
    sudo systemctl disable имя_службы.service
    
  • Проверить, включена ли служба в автозагрузку:
    systemctl is-enabled имя_службы.service
    
    Вывод: enabled (включена), disabled (отключена), static (не может быть включена напрямую, но может быть зависимостью), masked (полностью заблокирована).

Шаг 3: Просмотр статуса и всех служб

  • Детальный статус конкретной службы:
    systemctl status имя_службы.service
    
    Вывод показывает: Active: (состояние), Main PID: (идентификатор процесса), и последние строки журнала этой службы.
  • Список всех загруженных (активных) юнитов:
    systemctl list-units --type=service
    
  • Список ВСЕХ доступных служб (включая неактивные):
    systemctl list-units --type=service --all
    
  • Поиск службы по имени:
    systemctl list-units --type=service --all | grep -i ssh
    

Шаг 4: Анализ логов с помощью journalctl

Логи systemd хранятся в бинарном журнале, доступном через journalctl.

  • Просмотр логов конкретной службы:
    sudo journalctl -u имя_службы.service
    
  • Отслеживание логов в реальном времени (аналог tail -f):
    sudo journalctl -u имя_службы.service -f
    
  • Логи за последнюю загрузку системы:
    sudo journalctl -b
    
  • Логи с фильтрацией по времени:
    sudo journalctl --since "2026-02-15 10:00:00" --until "2026-02-15 12:00:00"
    
  • Показать логи с максимальной детализацией для службы:
    sudo journalctl -u имя_службы.service -o verbose
    

Шаг 5: Дополнительные операции (перезагрузка конфигурации, маскировка)

  • Перезагрузка конфигурации systemd (обязательно после создания/изменения unit-файлов):
    sudo systemctl daemon-reload
    
  • Полная блокировка службы (mask) — предотвращает любой ручной или автоматический запуск:
    sudo systemctl mask имя_службы.service
    
    Создаёт символическую ссылку на /dev/null. Разблокировка: sudo systemctl unmask имя_службы.service.
  • Принудительная остановка и сброс состояния службы:
    sudo systemctl reset-failed имя_службы.service
    
    Полезно, если служба в состоянии failed и не запускается после исправления ошибки.

Проверка результата

  1. Для проверки работы: выполните systemctl status имя_службы. Убедитесь, что строка Active: содержит active (running).
  2. Для проверки автозагрузки: перезагрузите систему (sudo reboot) и после входа проверьте статус службы.
  3. Для проверки логов: убедитесь, что journalctl -u имя_службы не содержит ошибок (failed, error, permission denied).

Возможные проблемы

  • Ошибка Failed to start ... или Unit not found.
    • Причина: Unit-файл отсутствует или имеет неверное имя. Убедитесь, что служба существует: systemctl list-unit-files | grep имя_службы. Проверьте синтаксис unit-файла: sudo systemd-analyze verify /etc/systemd/system/имя_службы.service.
  • Служба запускается, но сразу же останавливается.
    • Причина: Ошибка в самом приложении или неверные параметры в секции [Service] (например, ExecStart указывает на несуществующий бинарник). Смотрите детальные логи: sudo journalctl -u имя_службы.service -n 50 --no-pager.
  • Permission denied при попытке управления системной службой.
    • Причина: Выполняете команду без sudo. Для управления системными службами (из /etc/systemd/system/) требуются права root.
  • Служба не включается в автозагрузку (enable не срабатывает).
    • Причина: Unit-файл имеет [Install] секцию, но не содержит WantedBy= или RequiredBy= (чаще всего WantedBy=multi-user.target). Добавьте эту строку в unit-файл и выполните daemon-reload и enable заново.
  • Циклические перезапуски (restart loop).
    • Причина: В unit-файле секция [Service] содержит Restart=always (или on-failure), а процесс немедленно завершается с ошибкой. Исправьте ошибку приложения или временно закомментируйте Restart для диагностики.

Часто задаваемые вопросы

Как проверить, работает ли служба systemd?
Чем systemd отличается от старых init-скриптов (SysVinit)?
Как создать свой собственный unit-файл для сервиса?
Почему служба не запускается при загрузке, хотя включена через systemctl enable?

Полезное

Проверка статуса службы
Базовое управление (start, stop, restart)
Управление автозагрузкой
Просмотр всех служб и фильтрация
Работа с журналом (journalctl)
Перезагрузка демона systemd

Эта статья помогла вам решить проблему?