Что такое таймеры в systemd и как их использовать для планирования задач?

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

Ответ

Таймеры (.timer) в systemd — это юниты для планирования задач, современная и более мощная альтернатива cron. Они предназначены для активации других юнитов (обычно сервисов — .service) по расписанию или по событию.

Ключевые преимущества перед cron:

  • Интеграция с системой: Полная интеграция с journald для структурированного логирования, управление через systemctl.
  • Зависимости: Могут использовать систему зависимостей systemd (например, запускать задачу только после монтирования определённого раздела).
  • Гибкое расписание: Поддержка календарных выражений (например, Mon..Fri), относительных интервалов и активации по событию загрузки.
  • Persistent mode: Опция Persistent=true гарантирует выполнение пропущенной задачи при следующем запуске системы.

Пример: Ежедневное резервное копирование

  1. Сервис (/etc/systemd/system/backup.service): Определяет что выполнять.

    [Unit]
    Description=Database backup job
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/backup-script.sh
    User=backup-user
  2. Таймер (/etc/systemd/system/backup.timer): Определяет когда выполнять.

    [Unit]
    Description=Run backup daily at 2 AM
    
    [Timer]
    OnCalendar=*-*-* 02:00:00
    Persistent=true
    
    [Install]
    WantedBy=timers.target
  3. Активация и управление:

    # Включить таймер для автозапуска
    sudo systemctl enable backup.timer
    # Запустить таймер немедленно
    sudo systemctl start backup.timer
    # Просмотр статуса и следующего времени срабатывания
    systemctl status backup.timer
    # Просмотр логов выполнения задачи
    journalctl -u backup.service

Типичные сценарии в DevOps: планирование очистки логов, запуск синхронизации конфигураций, выполнение периодических health-чеков и отправка метрик.