Запуск задач по расписанию через Systemd Timer
Systemd позволяет установить таймеры. Эта функция предназначена для работы с сервисами, но может быть использована и для других вещей. Это достаточно мощная замена привычному cron и anacron.
Для примера настроим таймер на выполнение резервной копии сайта на каждый день.
Создание сервиса
Подготовим элементарный скрипт бэкапа:
1 |
|
Не забываем выдать соответствующие привилегии на запуск:
1 | chmod +x /home/scripts/backup.sh |
Теперь создаем новый файл /usr/lib/systemd/system/backup.service
следующего содержания:
1 | [Unit] |
Создание таймера
Создадим новый файл /usr/lib/systemd/system/backup.timer
со следующим содержанием:
1 | [Unit] |
Опции OnCalendar
- OnActiveSec - определяет таймер относительно момента времени его активации.
- OnBootSec - определяет таймер при загрузке системы.
- OnStartupSec - определяет таймер при запуске systemd.
- OnUnitActiveSec - определяет таймер относительно момента когда таймер был активен последний раз.
- OnUnitInactiveSec - определяет таймер относительно момента когда таймер был деактивирован.
Опции добавленные в RHEL 7.2
- AccuracySec - определяет таймер за прошедшее в течение временного окна, начиная с заданного времени.
- Persistent - логическое значение true и false. Информация о времени когда сервис выполнялся последний раз хранится на диске. Эта информация затем используется при перезагрузке для возможности выполнить просроченное событие таймера, которое не было выполнено из-за отключения системы.
- WakeSystem - логическое значение, если установлено true, то по истечению времени заставит систему возобновить работу из режима ожидания, если система поддерживает это.
Синтаксис дат и времени
1 | Minimal form Normalized form |
Заметьте, что ***:20/15** означает ***:20:00**, ***:35:00**, ***:50:00**, перезапуск в следующий час в *:20:00.
Запуск
Активируем загрузку и запустим сервис:
1 | # systemctl enable backup.timer |
Для проверки автозапуска:
1 | # systemctl is-enabled backup.timer |
Для проверки запуска таймера:
1 | # systemctl is-active backup.timer |
Если необходимо, сервис можно запустить вручную в любое время:
1 | # systemctl start backup |
Если были внесены какие-то изменение в таймер, например время выполнения, то необходимо произвести обновление сервиса:
1 | # systemctl daemon-reload |
Начиная с версии RHEL 7.2 доступна новая команда для просмотра некоторой информации по установленным таймерам:
1 | # systemctl list-timers backup* |