← Назад к вопросам

Что такое systemd?

1.3 Junior🔥 251 комментариев
#Linux и администрирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

systemd — инициализационная система Linux

systemd — это современная система инициализации (init system) для Linux, которая управляет загрузкой системы, сервисами, логированием и другими аспектами операционной системы. systemd заменила старую систему SysVinit и стала стандартом в большинстве современных Linux дистрибутивов (Ubuntu, CentOS, Debian).

Основные функции

  1. Управление сервисами — запуск, остановка, перезагрузка
  2. Автозапуск — автоматический запуск при загрузке
  3. Зависимости — управление порядком запуска
  4. Логирование — журналирование через journald
  5. Таймеры — запуск по расписанию (замена cron)
  6. Управление процессами — контроль ресурсов

Файлы unit'ов

Расположение:

  • /etc/systemd/system/ — пользовательские unit'ы
  • /lib/systemd/system/ — unit'ы из пакетов

Пример service файла

[Unit]
Description=My Python Application
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/my-app
ExecStart=/usr/bin/python3 app.py
Restart=on-failure
RestartSec=10

StandardOutput=journal
StandardError=journal

Environment="DEBUG=true"

[Install]
WantedBy=multi-user.target

Основные команды systemctl

sudo systemctl start my-app        # Запуск
sudo systemctl stop my-app         # Остановка
sudo systemctl reload-or-restart my-app  # Перезагрузка
sudo systemctl status my-app       # Статус
sudo systemctl enable my-app       # Включить автозапуск
sudo systemctl disable my-app      # Отключить автозапуск

journalctl -u my-app              # Логи сервиса
journalctl -u my-app -f           # Логи в реальном времени
journalctl -u my-app -n 50        # Последние 50 строк

sudo systemctl list-units --type=service          # Все сервисы
sudo systemctl list-units --type=service --state=running # Активные
sudo systemctl daemon-reload       # Перечитать конфиг

Типы сервисов (Type)

  • simple — обычный процесс
  • forking — процесс форкается
  • oneshot — выполнить один раз и завершить
  • notify — процесс уведомляет systemd о готовности

Nginx пример

[Unit]
Description=Nginx HTTP Server
After=network.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Таймеры systemd (замена cron)

# /etc/systemd/system/backup.timer
[Unit]
Description=Daily backup timer

[Timer]
OnCalendar=daily
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

# /etc/systemd/system/backup.service
[Unit]
Description=Backup job

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

Запуск:

sudo systemctl enable backup.timer
sudo systemctl start backup.timer
sudo systemctl list-timers

Логирование journald

journalctl -f                    # Реальное время
journalctl -p err                # Только ошибки
journalctl --since "2 hours ago" # Последние 2 часа
journalctl --vacuum=30d          # Очистить старые логи

Автоматический перезапуск

[Service]
Restart=on-failure
RestartSec=5
StartLimitBurst=5
StartLimitIntervalSec=60

Зависимости между сервисами

[Unit]
After=mysql.service
Requires=mysql.service

DevOps практика

✅ Создавай unit файлы для критических приложений ✅ Используй systemctl enable для автозапуска ✅ Мониторь логи через journalctl ✅ Используй Type=notify для корректной готовности ✅ Таймеры лучше чем cron для системных задач ✅ Упаковывай unit файлы в .deb пакеты

Вывод

systemd — критически важная система инициализации современного Linux, управляющая жизненным циклом сервисов, обеспечивающая логирование, зависимости между сервисами и автоматизацию запуска при загрузке.