Какой у вас опыт работы с systemd-юнитами?

«Какой у вас опыт работы с systemd-юнитами?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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-файлов для передачи переменных окружения.

Этот опыт позволил мне надежно управлять фоновыми процессами, оперативно диагностировать проблемы через журналы и строить отказоустойчивые конфигурации сервисов.