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