Планировщик задач в systemd

Cron хорошо, но есть и другие...

Systemd Timers — это unit-файл, предназначенный для планирования запуска сервиса. Когда срабатывает таймер, соответствующий сервис запускается.

Основные параметры:

Simple

Таймер активируется через заданное количество секунд после загрузки системы.
OnActiveSec=60s

Calendar

Запускается в определённое время календаря.
OnCalendar=*-*-* 18:00:00

Monotonic

Активирует событие относительно предыдущего события
OnActiveSec — срабатывает после активации юнита (systemd-сервиса).
OnBootSec — срабатывает после запуска всей системы.
OnStartupSec — срабатывает после запуска менеджера сервисов.
OnUnitActiveSec — срабатывает после последнего запуска юнита.
OnUnitInactiveSec — срабатывает после последней остановки сервиса.
OnBootSec=1h

ConditionPathExists

Активирует событие если существует файл /usr/local/bin/my_backup_script.sh
ConditionPathExists=/usr/local/bin/my_backup_script.sh

RandomizedDelaySec

Использовать случайную задержку перед запуском
RandomizedDelaySec=300


Создадим юнит-service, которая будет вызывать скрипт резервного копирования /usr/local/bin/my_backup_script.sh

nano /etc/systemd/system/backup.service
Добавим параметры:
[Unit]
Description=Daily Backup Service
[Service]
Type=simple
ExecStart=/usr/local/bin/my_backup_script.sh
(Ctrl + o - сохранить, Ctrl + x - выйти)

Создаем юнит-timer файл backup.timer

nano /etc/systemd/system/backup.timer
Добавляем:
[Unit]
Description=Run backup daily at midnight
[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true # задача выполнится при загрузке, если была пропущена
[Install]
WantedBy=timers.target
(Ctrl + o - сохранить, Ctrl + x - выйти)
Запуск службы каждый день в полночь

Включаем и проверяем работу таймера

Для активации наших таймеров выполняем команды:
systemctl daemon-reload
systemctl enable backup.timer
systemctl start backup.timer
Проверить состояние таймера можно командой:
systemctl list-timers | grep backup
Это покажет следующее запланированное выполнение созданного таймера.
Подпишись на Linux Spark поддержи канал