Таймеры в systemd

Таймеры systemd используются для выполнения задач по расписанию. Они могут заменять традиционные cron задания, предоставляя больше возможностей для управления и мониторинга. В этом руководстве мы рассмотрим, как создавать и управлять таймерами в systemd на операционной системе НАЙС ОС.

Основные понятия таймеров

Таймеры в systemd определяются с помощью unit файлов с расширением .timer. Эти файлы описывают расписание и условия запуска связанных service файлов. Каждый таймер работает в связке с соответствующей службой, которая выполняет запланированные задачи.

Структура таймеров

Таймеры systemd состоят из следующих секций:

  • [Unit] — общие параметры, такие как описание и зависимости.
  • [Timer] — параметры, специфичные для таймеров, такие как расписание и интервалы.
  • [Install] — параметры, определяющие, как и когда таймер должен быть активирован.

Пример таймера

Создадим таймер, который будет запускать службу каждые 15 минут.

Шаг 1: Создание service файла

sudo nano /etc/systemd/system/my_timer_service.service

Добавьте следующий контент:

[Unit]
Description=My Timer Service

[Service]
ExecStart=/usr/bin/my_script.sh

Шаг 2: Создание timer файла

sudo nano /etc/systemd/system/my_timer_service.timer

Добавьте следующий контент:

[Unit]
Description=Run My Timer Service every 15 minutes

[Timer]
OnBootSec=10min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target

Объяснение параметров

  • OnBootSec=10min — первый запуск через 10 минут после загрузки системы.
  • OnUnitActiveSec=15min — последующие запуски каждые 15 минут после предыдущего выполнения.
  • WantedBy=timers.target — таймер активируется вместе с целью timers.target.

Управление таймерами

После создания timer и service файлов необходимо перезагрузить конфигурацию systemd и управлять таймерами с помощью команд systemctl.

Перезагрузка конфигурации systemd

sudo systemctl daemon-reload

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

Активация таймера

sudo systemctl start my_timer_service.timer

Эта команда запускает таймер my_timer_service.timer.

Проверка состояния таймера

sudo systemctl status my_timer_service.timer

Эта команда отображает текущее состояние таймера my_timer_service.timer.

Включение таймера при загрузке

sudo systemctl enable my_timer_service.timer

Эта команда включает таймер my_timer_service.timer, чтобы он автоматически активировался при загрузке системы.

Отключение таймера

sudo systemctl stop my_timer_service.timer

Эта команда останавливает таймер my_timer_service.timer.

Отключение таймера при загрузке

sudo systemctl disable my_timer_service.timer

Эта команда отключает таймер my_timer_service.timer, чтобы он не активировался при загрузке системы.

Просмотр и отладка таймеров

Для просмотра и отладки таймеров используйте команды systemctl и journalctl.

Просмотр активных таймеров

systemctl list-timers

Эта команда отображает список всех активных таймеров, их состояния и расписание.

Просмотр журналов таймера

sudo journalctl -u my_timer_service.service

Эта команда отображает журналы для службы my_timer_service.service, что помогает в отладке и анализе её работы.

Проверка конфигурации таймера

sudo systemd-analyze verify /etc/systemd/system/my_timer_service.timer

Эта команда проверяет синтаксис timer файла и выявляет ошибки.

Дополнительные параметры таймеров

Таймеры systemd поддерживают множество параметров для гибкой настройки расписания и условий запуска:

  • OnCalendar= — задает расписание запуска в стиле cron. Например, OnCalendar=weekly.
  • Persistent= — при значении true таймер сохраняет своё состояние между перезагрузками системы и запускает пропущенные задания после перезапуска.
  • AccuracySec= — задает точность таймера. Например, AccuracySec=1min.

Пример использования OnCalendar

Создадим таймер, который будет запускаться каждый день в 3:00 утра.

sudo nano /etc/systemd/system/daily_task.timer

Добавьте следующий контент:

[Unit]
Description=Daily Task Timer

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

Таймеры systemd на НАЙС ОС предоставляют мощные и гибкие средства для планирования задач по расписанию. Использование таймеров позволяет заменить традиционные cron задания, обеспечивая больше возможностей для управления и мониторинга. Следование этим шагам и рекомендациям поможет вам эффективно создавать и управлять таймерами в вашей системе.