Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
systemd — инициализационная система Linux
systemd — это современная система инициализации (init system) для Linux, которая управляет загрузкой системы, сервисами, логированием и другими аспектами операционной системы. systemd заменила старую систему SysVinit и стала стандартом в большинстве современных Linux дистрибутивов (Ubuntu, CentOS, Debian).
Основные функции
- Управление сервисами — запуск, остановка, перезагрузка
- Автозапуск — автоматический запуск при загрузке
- Зависимости — управление порядком запуска
- Логирование — журналирование через journald
- Таймеры — запуск по расписанию (замена cron)
- Управление процессами — контроль ресурсов
Файлы 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, управляющая жизненным циклом сервисов, обеспечивающая логирование, зависимости между сервисами и автоматизацию запуска при загрузке.