Планировщик задач в systemd ⏰
LinuPark 🧙♂️
Cron хорошо, но есть и другие...
Systemd Timers — это unit-файл, предназначенный для планирования запуска другого сервиса. Когда срабатывает таймер, соответствующий сервис запускается.
Основные параметры:
Simple
Таймер активируется через заданное количество секунд после загрузки системы.
OnActiveSec=60s
Calendar
Запускается в определённое время календаря.
OnCalendar=*-*-* 18:00:00
Monotonic
Активирует событие относительно предыдущего события
OnBootSec=1h
OnActiveSec — срабатывает после активации юнита (systemd-сервиса).
OnBootSec — срабатывает после запуска всей системы.
OnStartupSec — срабатывает после запуска менеджера сервисов.
OnUnitActiveSec — срабатывает после последнего запуска юнита.
OnUnitInactiveSec — срабатывает после последней остановки сервиса.
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=Служба резервного копирования [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=Запуск службы каждый день в полночь [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
Это покажет следующее запланированное выполнение созданного таймера.