systemctl start/stop/enable
Тема дорожной карты · Linux & Unix Fundamentals
systemctl — это инструмент для управления сервисами и системами запуска на основе systemd, который является дефолтным менеджером сервисов на большинстве современных дистрибутивов Linux. Команды start, stop, restart, reload позволяют управлять текущим состоянием сервисов, в то время как enable и disable обеспечивают автоматический запуск сервисов при загрузке системы. Команда status предоставляет информацию о текущем состоянии сервиса и выводит последние логи, что позволяет быстро диагностировать проблемы.
Как это работает
systemctl является фронтендом для управления systemd, который является дефолтным инициализатором и менеджером сервисов на большинстве современных дистрибутивов Linux. Для управления сервисами используются unit-файлы, которые находятся в директории /etc/systemd/system/. В этих файлах объявляются параметры, такие как ExecStart (путь к исполняемому файлу), User (пользователь, от имени которого запускается сервис), Restart-policy (политика перезапуска сервиса), а также зависимости (например, After= и Wants=).
Команды systemctl позволяют выполнять различные операции:
systemctl start myapp— запускает сервисmyapp.systemctl stop myapp— останавливает сервисmyapp.systemctl restart myapp— перезапускает сервисmyapp.systemctl status myapp— выводит текущее состояние сервиса и последние логи.systemctl enable myapp— создает симлинк, чтобы сервис запускался автоматически при загрузке системы.journalctl -u myapp— выводит логи сервисаmyapp.
Также существуют различные типы unit-файлов:
.service— основной тип для управления сервисами..timer— альтернативаcron, позволяет выполнять задачи в определенное время..socket— позволяет активировать сервис лениво (lazy activation)..target— используется для группировки сервисов.
Команда systemd-analyze позволяет оценить производительность загрузки системы, показывая время загрузки и узкие места.
Когда применять
Unit-файлы systemd используются для управления каждым постоянным сервисом, обеспечивая автоматический перезапуск при сбоях, логирование и упорядочивание зависимостей. Это позволяет избежать необходимости вручную управлять сервисами и обеспечивает более надежную работу системы.
Тип .timer лучше, чем cron, для новых заданий, так как он обеспечивает лучшее логирование и управление зависимостями. Для контейнеризованных нагрузок systemd может быть заменен оркестраторами, такими как Docker или Kubernetes. Не следует запускать systemd внутри обычного контейнера, если это не строго необходимо. Например, команда podman run --systemd существует для редких случаев, когда это действительно необходимо.
Типичные ошибки
При работе с systemctl могут возникать различные ошибки:
- Правка файлов в директории
/lib/systemd/system/может быть перезаписана при обновлении пакета. Вместо этого следует использовать директорию/etc/systemd/system/или drop-in.d/директории. - Забытый
systemctl daemon-reloadпосле изменения unit-файлов может привести к тому, что изменения не будут применены. - Политика
Restart=alwaysможет привести к бесконечному циклу перезапуска сервиса, что может привести к высокой загрузке процессора и наводнению логов. - Дефолтное удержание журналов
journaldможет привести к быстрому заполнению диска. Для решения этой проблемы можно задать параметрSystemMaxUse=в файле конфигурацииjournald(/etc/systemd/journald.conf).
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…