Введение
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
- Причина: служба не установлена или имя указано неверно.
- Решение: проверьте имя службы через
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 имя_службы.