Linux

Systemctl команды: полная шпаргалка для управления службами Linux

Эта шпаргалка собрала ключевые команды systemctl, позволяющие эффективно управлять службами, целями и журналами в Linux. После изучения вы сможете быстро диагностировать и контролировать компоненты системы.

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

Введение

Systemctl — это основная утилита для управления systemd, которая является стандартной системой инициации в большинстве современных дистрибутивов Linux (таких как Ubuntu, Debian, CentOS, Fedora). С её помощью вы можете контролировать службы, цели (targets) и другие компоненты системы, выполнять диагностику и настройку автозапуска. Эта шпаргалка собрала наиболее часто используемые команды systemctl, чтобы вы могли быстро выполнять задачи администрирования, не тратя время на поиск в документации.

Требования

Перед началом убедитесь, что:

  • Ваша система использует systemd. Проверьте командой pidof systemd или systemctl --version. Если команда не найдена, возможно, вы используете альтернативную систему инициации (например, OpenRC или SysVinit).
  • У вас есть права sudo для выполнения команд, изменяющих состояние служб (запуск, остановка, включение автозапуска). Без прав администратора некоторые операции будут недоступны.
  • Вы знакомы с базовым использованием терминала и понимаете, что такое служба (service) в контексте Linux.

Управление службами

Основные команды для управления службами (service units):

# Запуск службы
sudo systemctl start имя_службы

# Остановка службы
sudo systemctl stop имя_службы

# Перезагрузка службы (полная перезагрузка процесса)
sudo systemctl restart имя_службы

# Перезагрузка с отправкой сигнала SIGHUP (если служба поддерживает)
sudo systemctl reload имя_службы

# Проверка, активна ли служба (возвращает "active" или "inactive")
systemctl is-active имя_службы

Пример: чтобы запустить веб-сервер Nginx, выполните sudo systemctl start nginx. Для остановки — sudo systemctl stop nginx.

Проверка статуса службы

Для получения подробной информации о службе, включая её состояние, PID, использование памяти и последние записи журнала:

# Показать полный статус службы
systemctl status имя_службы

# Проверить, включён ли автозапуск (возвращает "enabled" или "disabled")
systemctl is-enabled имя_службы

Команда status выводит описание службы, время последнего запуска, PID процесса (если активна), а также последние строки из журнала systemd. Это первый шаг при диагностике проблем.

Управление автозапуском

Контролируйте, какие службы запускаются автоматически при загрузке системы:

# Включить автозапуск службы (создаёт символьную ссылку)
sudo systemctl enable имя_службы

# Отключить автозапуск
sudo systemctl disable имя_службы

# Проверить статус автозапуска
systemctl is-enabled имя_службы

При включении autostart systemd создаёт ссылку в /etc/systemd/system/, указывающую на файл юнита в /lib/systemd/system/ или /etc/systemd/system/. Это гарантирует, что служба запустится при следующей загрузке.

Работа с целями (targets)

Цели (targets) аналогичны runlevels в SysV init. Они определяют состояние системы (например, многопользовательский режим или графический интерфейс):

# Переключиться на целевую цель (например, многопользовательский режим без GUI)
sudo systemctl isolate multi-user.target

# Установить целевую цель по умолчанию (при загрузке)
sudo systemctl set-default graphical.target

# Показать текущую цель по умолчанию
systemctl get-default

Распространённые цели:

  • poweroff.target — выключение системы.
  • rescue.target — аварийный режим (единственный пользователь, минимальные службы).
  • multi-user.target — многопользовательский режим без графического интерфейса (аналог runlevel 3).
  • graphical.target — многопользовательский режим с графическим интерфейсом (аналог runlevel 5).
  • reboot.target — перезагрузка.

Просмотр журналов (logs)

Systemd интегрирован с журналом journalctl. Для логов конкретной службы используйте:

# Показать все записи для службы
sudo journalctl -u имя_службы

# Следовать за логами в реальном времени (аналог tail -f)
sudo journalctl -u имя_службы -f

# Показать записи за последний час
sudo journalctl -u имя_службы --since "1 hour ago"

# Очистить журналы (осторожно! удаляет старые записи)
sudo journalctl --vacuum-time=3d  # удалить записи старше 3 дней

journalctl предоставляет мощные фильтры: по времени, по юниту, по приоритету. Например, sudo journalctl -p err покажет только ошибки.

Другие полезные команды

# Перезагрузить конфигурацию systemd (после изменений в файлах юнитов)
sudo systemctl daemon-reload

# Список всех загруженных юнитов (с фильтрацией по типу)
systemctl list-units --type=service --all

# Список всех установленных файлов юнитов (даже неактивных)
systemctl list-unit-files

# Перезагрузка системы
sudo systemctl reboot

# Завершение работы
sudo systemctl poweroff

# Принудительная перезагрузка (аварийная)
sudo systemctl emergency

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

После выполнения команд убедитесь, что службы работают как ожидается:

  • Для запущенной службы: systemctl is-active имя_службы должен вернуть active.
  • Для включённого автозапуска: systemctl is-enabled имя_службы должен показать enabled.
  • Проверьте логи через journalctl -u имя_службы на наличие ошибок после запуска.
  • Для целей: systemctl get-default покажет установленную цель по умолчанию, а systemctl list-units --type=target — активные цели.

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

Ошибка: "Failed to start . Unit not found."

  • Причина: служба не установлена или имя указано неверно.
  • Решение: проверьте имя службы через systemctl list-unit-files | grep -i <часть_имени>. Убедитесь, что пакет службы установлен (например, nginx для nginx.service).

Ошибка: "Access denied" или "Permission denied"

  • Причина: команда требует прав суперпользователя.
  • Решение: используйте sudo перед командой. Если sudo недоступен, войдите в систему как root.

Служба не запускается, статус "failed"

  • Причина: конфигурационная ошибка, отсутствие зависимостей или конфликт портов.
  • Решение: проверьте детали через systemctl status имя_службы и journalctl -u имя_службы. Убедитесь, что все указанные в [Requires] и [After] зависимости активны.

Systemctl не найден или команда недоступна

  • Причина: система не использует systemd (например, Alpine Linux, некоторые контейнеры, старые дистрибутивы).
  • Решение: если вы на дистрибутиве без systemd, используйте альтернативные инструменты, такие как service (для SysVinit) или rc-service (для OpenRC). Для проверки: cat /proc/1/comm — если выводит systemd, то systemd активен.

Изменения в конфигурационных файлах не применяются

  • Причина: systemd кэширует конфигурацию.
  • Решение: после редактирования файлов юнитов (.service) выполните sudo systemctl daemon-reload, а затем sudo systemctl restart имя_службы.

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

Что такое systemctl и для чего он используется?
Как проверить, работает ли служба?
Как сделать службу запускаемой автоматически при загрузке?
Что делать, если systemctl не найден?

Полезное

Проверка статуса службы
Управление состоянием службы
Включение и отключение автозапуска
Просмотр всех активных служб
Работа с целями (targets)
Просмотр журналов