Команда systemctl в Linux
Что такое systemctl
systemctl — это инструмент командной строки в системах Linux, используемый для управления системным и сервисным менеджером systemd. Являясь ключевым компонентом современных дистрибутивов Linux, он заменяет традиционную систему инициализации и команды управления службами.
Введение в systemd
systemd — это системный и сервисный менеджер, который:
- Работает как PID 1 (первый запускаемый процесс)
- Отвечает за запуск, остановку и управление всеми остальными процессами
- Обеспечивает возможность параллельного запуска, значительно ускоряя загрузку системы
- Поддерживает запуск служб по требованию
- Обеспечивает сбор журналов (через journald)
Базовый синтаксис systemctl
systemctl [选项] [命令] [单元名称]
Общие параметры
| Опция | Описание |
|---|---|
| -t, --type | Указать тип юнита (service, socket, device и т. д.) |
| -a, --all | Показать все юниты, включая неактивные |
| --state | Фильтровать юниты по состоянию |
| -l, --full | Показать полную информацию о юните |
| -H, --host | Работать с удалённым хостом |
Команды управления службами
Запуск/остановка/перезапуск служб
Пример
# Запустить сервис
sudo systemctl start [имя службы]
# Остановить службу
sudo systemctl stop [имя службы]
# Перезапустить службу
sudo systemctl restart [имя службы]
# Перезагрузить конфигурацию (без перезапуска службы)
sudo systemctl reload [имя службы]
sudo systemctl start [имя службы]
# Остановить службу
sudo systemctl stop [имя службы]
# Перезапустить службу
sudo systemctl restart [имя службы]
# Перезагрузить конфигурацию (без перезапуска службы)
sudo systemctl reload [имя службы]
Просмотр состояния службы
Пример
# Просмотреть состояние одной службы
systemctl status [имя службы]
# Просмотреть все запущенные службы
systemctl list-units --type=service --state=running
# Просмотреть службы с ошибками
systemctl --failed
systemctl status [имя службы]
# Просмотреть все запущенные службы
systemctl list-units --type=service --state=running
# Просмотреть службы с ошибками
systemctl --failed
Включение/отключение служб
Пример
# Включить службу (автозапуск при загрузке)
sudo systemctl enable [имя службы]
# Отключить службу (отменить автозапуск при загрузке)
sudo systemctl disable [имя службы]
# Проверить, включена ли служба
systemctl is-enabled [имя службы]
sudo systemctl enable [имя службы]
# Отключить службу (отменить автозапуск при загрузке)
sudo systemctl disable [имя службы]
# Проверить, включена ли служба
systemctl is-enabled [имя службы]
Управление unit-файлами
Расположение unit-файлов
- Системные unit-файлы:
/usr/lib/systemd/system/ - Собственные unit-файлы администратора:
/etc/systemd/system/
Основные операции с unit-файлами
Пример
# Перезагрузить все unit-файлы (необходимо после изменения конфигурации)
sudo systemctl daemon-reload
# Показать содержимое файла юнита
systemctl cat [имя юнита]
# Редактировать файл юнита (создаёт файл переопределения)
sudo systemctl edit [имя юнита] --full
sudo systemctl daemon-reload
# Показать содержимое файла юнита
systemctl cat [имя юнита]
# Редактировать файл юнита (создаёт файл переопределения)
sudo systemctl edit [имя юнита] --full
Управление состоянием системы
Управление питанием системы
Пример
# Завершение работы
sudo systemctl poweroff
# Перезагрузка
sudo systemctl reboot
# Приостановка
sudo systemctl suspend
# Гибернация
sudo systemctl hibernate
sudo systemctl poweroff
# Перезагрузка
sudo systemctl reboot
# Приостановка
sudo systemctl suspend
# Гибернация
sudo systemctl hibernate
Уровни выполнения системы
Пример
# Получить текущую цель (уровень выполнения)
systemctl get-default
# Установить цель по умолчанию
sudo systemctl set-default [имя цели]
# Переключить цель (вступает в силу немедленно)
sudo systemctl isolate [имя цели]
systemctl get-default
# Установить цель по умолчанию
sudo systemctl set-default [имя цели]
# Переключить цель (вступает в силу немедленно)
sudo systemctl isolate [имя цели]
Общие цели:
- graphical.target - режим графического интерфейса
- multi-user.target - многопользовательский текстовый режим
- rescue.target - режим восстановления
- emergency.target - аварийный режим
Практические примеры
Пример 1: Управление службой Nginx
Пример
# Запустить Nginx
sudo systemctl start nginx
# Включить автозапуск при загрузке
sudo systemctl enable nginx
# Проверить статус
systemctl status nginx
# Проверить конфигурацию, затем перезагрузить
sudo nginx -t # Сначала проверить конфигурацию
sudo systemctl reload nginx
sudo systemctl start nginx
# Включить автозапуск при загрузке
sudo systemctl enable nginx
# Проверить статус
systemctl status nginx
# Проверить конфигурацию, затем перезагрузить
sudo nginx -t # Сначала проверить конфигурацию
sudo systemctl reload nginx
Пример 2: Создание пользовательской службы
- Создайте файл службы
/etc/systemd/system/myapp.service:
Пример
[Unit]
Description=Моё пользовательское приложение
After=network.target
[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
WorkingDirectory=/opt/myapp
User=myappuser
Group=myappgroup
Restart=always
[Установка]
WantedBy=multi-user.target
Description=Моё пользовательское приложение
After=network.target
[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
WorkingDirectory=/opt/myapp
User=myappuser
Group=myappgroup
Restart=always
[Установка]
WantedBy=multi-user.target
- Включите и запустите службу:
Пример
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl enable myapp
sudo systemctl start myapp
Устранение распространённых проблем
Служба не запустилась
Просмотр подробных логов:
journalctl -u [服务名] -xe
Проверьте зависимости:
systemctl list-dependencies [服务名]
Запустите в режиме отладки:
systemctl status [服务名] -l --no-pager
Анализ производительности
Пример
# Показать время загрузки системы
systemd-analyze
# Показать время запуска каждой службы
systemd-analyze blame
# Создать диаграмму загрузки (требуется графический интерфейс)
systemd-analyze plot > boot.svg
systemd-analyze
# Показать время запуска каждой службы
systemd-analyze blame
# Создать диаграмму загрузки (требуется графический интерфейс)
systemd-analyze plot > boot.svg
Справочник команд Linux