Если у вас есть сервер на Linux или просто хотите лучше понимать внутреннюю кухню Unix-подобных систем, рано или поздно вы столкнетесь с командой systemctl.
Это основной инструмент управления systemd — современным менеджером служб и процессов, который отвечает за запуск системы, старт сервисов, их остановку, автозагрузку и множество связанных вещей.
Если совсем упрощать, то systemctl — это такой пульт управления для всего, что systemd умеет запускать и контролировать: от веб-сервера и SSH до таймеров, точек монтирования и системных целей загрузки.
По промокоду DZEN вы получите скидку на заказ VPS или dedicated от UFO.Hosting. С этим кодом вы сможете запустить свои проекты на надежной и производительной платформе, готовой к любым нагрузкам.
Немного контекста: что такое systemd и «юниты»
Systemd работает с объектами, которые называются юнитами. Юнит — это описание того, что нужно запустить и как это контролировать. Самые популярные типы юнитов:
- service — службы. В большинстве повседневных задач вы будете иметь дело именно с этим видом юнитов.
- timer — таймеры.
- socket — сокеты для socket-активации.
- mount — точки монтирования.
- target — цели загрузки, которые объединяют набор сервисов.
Базовая логика работы systemctl
Команда обычно выглядит так:
systemctl <действие> <юнит>
Например:
systemctl status ssh
systemctl restart nginx
systemctl enable docker
Обратите внимание: расширение .service чаще всего можно не писать — systemd сам догадается.
Как посмотреть состояние службы
Начать почти всегда стоит со статуса:
systemctl status nginx
В ответ вы увидите, запущен ли сервис, когда он стартовал, какой у него главный процесс, последние строки логов и причину ошибки, если запуск не удался. Это один из самых полезных экранов при диагностике.
Если нужен только короткий факт «работает/не работает», можно так:
systemctl is-active nginx
Команда вернёт active, inactive, failed. Это очень удобно для скриптов.
Запуск, остановка и перезапуск
Самый частый набор действий:
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
Иногда сервису достаточно не полного перезапуска, а перечитывания конфигурации:
systemctl reload nginx
Важно понимать разницу: restart останавливает и запускает заново, а reload просит сервис применить конфиг без остановки.
Автозагрузка: enable и disable
Запущенный сервис не всегда будет запускаться при старте системы. За автозагрузку отвечают команды:
systemctl enable nginx
systemctl disable nginx
Если вы хотите включить автозагрузку и сразу запустить сервис, есть удобная форма:
systemctl enable --now nginx
И обратный вариант — отключить и остановить автозагрузку:
systemctl disable --now nginx
Как посмотреть список сервисов и юнитов
Когда вы не уверены в названии, помогают списки. Активные юниты, которые сейчас загружены и работают вызываются следующей командой:
systemctl list-units
Для доступа всех известных юнитов выполните:
systemctl list-unit-files
Также вы можете фильтровать фильтровать юниты по типу. Например, если нужно показать только сервисы:
systemctl list-units --type=service
Что делать, если вы изменили unit-файл
Если вы правили unit-файл вручную (или поставили новый), systemd нужно перечитать конфигурацию:
systemctl daemon-reload
Это не перезапуск сервисов, а обновление внутренних данных systemd. После этого обычно делают restart нужной службы.
Как правильно отредактировать сервис
Одна из типичных ошибок новичков — править unit-файл прямо в /usr/lib/systemd/system/… или /lib/systemd/system/…. При обновлении пакета изменения могут исчезнуть.
Для безопасной настройки используйте override:
systemctl edit nginx
Откроется редактор, где вы создадите файл переопределения (обычно в /etc/systemd/system/nginx.service.d/override.conf). Туда добавляют только нужные строки, например лимиты или параметры запуска.
Посмотреть исходный unit:
systemctl cat nginx
А увидеть все параметры, которые systemd знает о юните:
systemctl show nginx
Как связаны systemctl и логи
С помощью статуса можно посмотреть последние строки, однако полноценные логи лучше всего смотреть через журнал systemd — journalctl. Чаще всего используют:
journalctl -u nginx
Логи за текущую загрузку:
journalctl -u nginx -b
Если сервис не стартует, связка systemctl status + journalctl -u <service> почти всегда даёт ответ, где проблема.
systemctl --user: управление службами в рамках пользователя
Systemd умеет запускать не только системные, но пользовательские сервисы. Например, это удобно для фоновых задач без root-доступа.
Пример:
systemctl --user status
systemctl --user start myapp.service
Чтобы пользовательские сервисы работали без активного входа в систему, иногда включают lingering:
loginctl enable-linger <username>
Итог
systemctl полезен тем, что даёт единый понятный интерфейс управления сервисами: запуск, остановка, автозагрузка, проверка состояния и базовая диагностика. Если вы освоите базовые команды, администрирование станет заметно проще: вместо догадок вы будете быстро видеть, что именно происходит и почему.