linux-labs

Вики / Службы и systemd

systemd

Концепция Ubuntu 24.04 · systemd 255 СлужбыsystemdЗагрузкаПроцессы

Init-система и менеджер служб (PID 1): юниты, цели, зависимости, журналы.

systemd — первый процесс системы (PID 1) и менеджер служб большинства современных дистрибутивов. Он запускает и контролирует юниты, разрешает зависимости между ними и параллелит загрузку.

Типы юнитов:

Тип Расширение Что описывает
service .service служба/демон (nginx, sshd)
socket .socket сокет активации
timer .timer расписание (замена cron)
mount .mount точку монтирования
target .target группу юнитов (аналог runlevel)

Управление — через systemctl, журналы — через journalctl.

Юниты ищутся в (по возрастанию приоритета):

  • /lib/systemd/system/ — пакетные (не редактировать);
  • /etc/systemd/system/ — локальные переопределения (редактировать здесь).

Структура .service:

[Unit]
Description=My App
After=network-online.target

[Service]
ExecStart=/usr/bin/myapp
Restart=on-failure
User=myapp

[Install]
WantedBy=multi-user.target

Правильный способ доработать чужой юнит — drop-in, не правка оригинала:

sudo systemctl edit nginx        # создаёт /etc/systemd/system/nginx.service.d/override.conf
sudo systemctl daemon-reload     # перечитать юниты после ручных правок

Цель — группа юнитов, аналог уровней загрузки:

  • multi-user.target — обычный сервер (без GUI);
  • graphical.target — с графикой;
  • rescue.target — однопользовательский режим восстановления.
systemctl get-default              # текущая цель по умолчанию
sudo systemctl set-default multi-user.target
systemctl isolate rescue.target    # переключиться сейчас

Служба не стартует

  1. systemctl status <unit> — код выхода и последние строки журнала.
  2. journalctl -xeu <unit> — подробности с пояснениями.
  3. После ручной правки юнита всегда sudo systemctl daemon-reload.

«Unit not found»

Проверь имя и путь: systemctl cat <unit>. Если правил файл — daemon-reload.

Долгая загрузка

systemd-analyze blame — что тормозит; systemd-analyze critical-chain.

systemctl status nginx            # состояние
systemctl start|stop|restart nginx
systemctl enable|disable nginx    # автозапуск
systemctl reload nginx            # перечитать конфиг без обрыва
systemctl daemon-reload           # после правки юнит-файлов
journalctl -u nginx -f            # логи службы
systemd-analyze blame             # тайминги загрузки

См. также