Перейти к содержанию

Управление службами НАЙС.ОС через systemd

systemd — системный менеджер НАЙС.ОС: запускает службы, объединяет их зависимости, отслеживает завершение процессов и предоставляет журнал через journalctl. В редакции CLOUD на нём основаны сеть (systemd-networkd), DNS (systemd-resolved), SSH, обслуживание контейнеров и многие фоновые задания.

Понятие unit

Вид unit Назначение Пример
.service процесс/служба systemd-networkd.service
.socket сокетная активация сокеты сервисов при их наличии
.timer запуск по расписанию периодические задания
.mount файловая система точка монтирования
.target этап/группа зависимостей multi-user.target

Сборочный рецепт НАЙС.ОС выбирает multi-user.target как базовую системную цель. Это соответствует серверной системе без обязательного графического рабочего стола.

Начните с чтения состояния

systemctl --failed
systemctl list-units --type=service --state=running
systemctl status systemd-networkd --no-pager
systemctl is-enabled systemd-networkd
systemctl cat systemd-networkd

active означает, что служба сейчас работает, а enabled — что для неё созданы связи автозапуска. Это разные свойства: служба может быть запущена вручную, по зависимости или сокету без enabled.

Основные действия

# Изучить журнал конкретной службы:
journalctl -u sshd -b -n 100 --no-pager

# Показать зависимости:
systemctl list-dependencies sshd

# Показать параметры службы:
systemctl show sshd -p FragmentPath -p ExecStart -p ActiveState

Для управляемой не критичной службы доступны действия start, stop, restart, reload, enable, disable и daemon-reload. Однако применять их следует только после понимания влияния на пользователей и зависимости.

Не перезапускайте критичные службы без плана

systemctl restart systemd-networkd в SSH-сеансе может оборвать управление. systemctl restart sshd способен завершить новые подключения при ошибочном конфиге. Используйте консоль и предварительную проверку.

Загрузка новой конфигурации unit

При изменении unit-файла или drop-in:

sudo systemctl daemon-reload
systemctl cat ИМЯ_СЛУЖБЫ

daemon-reload перечитывает конфигурацию менеджера и не перезапускает саму службу. Отдельный restart/reload нужен только при необходимости применить новые параметры процессу.

Как узнать, почему сервис не запустился

systemctl status ИМЯ_СЛУЖБЫ --no-pager -l
journalctl -u ИМЯ_СЛУЖБЫ -b --no-pager -n 150
systemctl show ИМЯ_СЛУЖБЫ -p Result -p ExecMainStatus -p Restart

Используйте реальное имя unit. Для сетевых служб отдельно проверяйте состояние интерфейсов и доступ к DNS: активный systemd-unit не доказывает готовность сети.

См. журналирование и автозапуск/таймеры.