Ответ
Systemd — это основной инструмент для управления службами и системой в современных дистрибутивах Linux. Мой опыт включает:
- Создание и модификация юнитов: Разработка кастомных
.serviceфайлов для собственных приложений и демонов. Например, для долгоживущего Python-сервиса:[Unit] Description=My Python API Service After=network.target Requires=network.target
[Service] Type=simple User=appuser Group=appuser WorkingDirectory=/opt/myapp ExecStart=/usr/bin/python3 /opt/myapp/main.py Restart=on-failure RestartSec=5
Логирование в journald
StandardOutput=journal StandardError=journal
Ограничения ресурсов (опционально)
MemoryLimit=512M CPUQuota=80%
[Install] WantedBy=multi-user.target
* **Управление и отладка:** Ежедневное использование команд `systemctl start/stop/restart/status/enable/disable`. Для отладки проблем незаменим `journalctl -u service-name -f --since "5 minutes ago"`.
* **Использование таймеров:** Замена традиционного cron на systemd `.timer` юниты для задач по расписанию, что дает лучшую интеграцию с журналированием и зависимостями.
* **Работа с зависимостями и порядком запуска:** Настройка директив `After`, `Before`, `Requires`, `Wants` для корректного порядка инициализации сервисов в сложных стэках (например, чтобы база данных запускалась до приложения).
* **Интеграция с контейнерами:** Создание transient-юнитов (с `--scope`) для управления контейнерами, хотя для production-оркестрации предпочтительнее использовать Docker с флагом `--restart` или, что еще лучше, Kubernetes.
* **Практические сценарии:** Настройка автоматического рестарта (`Restart=always`) для критичных сервисов, ограничение ресурсов через `MemoryLimit` и `CPUQuota`, настройка environment-файлов для передачи переменных окружения.
Этот опыт позволил мне надежно управлять фоновыми процессами, оперативно диагностировать проблемы через журналы и строить отказоустойчивые конфигурации сервисов.