Systemd Timer
Запуск задач по расписанию через Systemd Timer
Systemd позволяет установить таймеры. Эта функция предназначена для работы с сервисами, но может быть использована и для других вещей. Это достаточно мощная замена привычному cron и anacron.
Для примера настроим таймер для выполнение бэкапа сайта на каждый день.
Создание сервиса
Подготовим элементарный скрипт бэкапа:
#!/bin/bash DAYMONTH=`date "+%d"` /bin/tar --selinux -czvf /srv/www/example.com/backup-$DAYMONTH.tgz /backup &>/dev/null
Не забываем выдать соответствующие привилегии на запуск:
chmod +x /home/scripts/backup.sh
Теперь создаем новый файл /usr/lib/systemd/system/backup.service
следующего содержания:
[Unit] Description=Backup www of example.com [Service] Type=simple ExecStart=/home/scripts/backup.sh [Install] WantedBy=multi-user.target
Создание таймера
Создадим новый файл /usr/lib/systemd/system/backup.timer
со следующим содержанием:
[Unit] Description=Execute backup every day at 04:00 [Timer] OnCalendar=*-*-* 04:00:00 Unit=backup.service [Install] WantedBy=multi-user.target
Опции OnCalendar
- OnActiveSec - определяет таймер относительно момента времени его активации.
- OnBootSec - определяет таймер при загрузке системы.
- OnStartupSec - определяет таймер при запуске systemd.
- OnUnitActiveSec - определяет таймер относительно момента когда таймер был активен последний раз.
- OnUnitInactiveSec - определяет таймер относительно момента когда таймер был деактивирован.
Опции добавленные в RHEL 7.2
- AccuracySec - определяет таймер за прошедшее в течение временного окна, начиная с заданного времени.
- Persistent - логическое значение true и false. Информация о времени когда сервис выполнялся последний раз хранится на диске. Эта информация затем используется при перезагрузке для возможности выполнить просроченное событие таймера, которое не было выполнено из-за отключения системы.
- WakeSystem - логическое значение, если установлено true, то по истечению времени заставит систему возобновить работу из режима ожидания, если система поддерживает это.
Синтаксис дат и времени
Minimal form Normalized form Sat,Thu,Mon-Wed,Sat-Sun ==> Mon-Thu,Sat,Sun *-*-* 00:00:00 Mon,Sun 12-*-* 2,1:23 ==> Mon,Sun 2012-*-* 01,02:23:00 Wed *-1 ==> Wed *-*-01 00:00:00 Wed-Wed,Wed *-1 ==> Wed *-*-01 00:00:00 Wed, 17:48 ==> Wed *-*-* 17:48:00 Wed-Sat,Tue 12-10-15 1:2:3 ==> Tue-Sat 2012-10-15 01:02:03 *-*-7 0:0:0 ==> *-*-07 00:00:00 10-15 ==> *-10-15 00:00:00 monday *-12-* 17:00 ==> Mon *-12-* 17:00:00 Mon,Fri *-*-3,1,2 *:30:45 ==> Mon,Fri *-*-01,02,03 *:30:45 12,14,13,12:20,10,30 ==> *-*-* 12,13,14:10,20,30:00 mon,fri *-1/2-1,3 *:30:45 ==> Mon,Fri *-01/2-01,03 *:30:45 03-05 08:05:40 ==> *-03-05 08:05:40 08:05:40 ==> *-*-* 08:05:40 05:40 ==> *-*-* 05:40:00 Sat,Sun 12-05 08:05:40 ==> Sat,Sun *-12-05 08:05:40 Sat,Sun 08:05:40 ==> Sat,Sun *-*-* 08:05:40 2003-03-05 05:40 ==> 2003-03-05 05:40:00 2003-03-05 ==> 2003-03-05 00:00:00 03-05 ==> *-03-05 00:00:00 hourly ==> *-*-* *:00:00 daily ==> *-*-* 00:00:00 monthly ==> *-*-01 00:00:00 weekly ==> Mon *-*-* 00:00:00 *:20/15 ==> *-*-* *:20/15:00
Заметьте, что *:20/15 означает *:20:00, *:35:00, *:50:00, перезапуск в следующий час в *:20:00.
Запуск
Активируем загрузку и запустим сервис:
# systemctl enable backup.timer # systemctl start backup.timer
Для проверки автозапуска:
# systemctl is-enabled backup.timer
enabled
Для проверки запуска таймера:
# systemctl is-active backup.timer
active
Если необходимо, сервис можно запустить вручную в любое время:
# systemctl start backup
Если были внесены какие-то изменение в таймер, например время выполнения, то необходимо произвести обновление сервиса:
# systemctl daemon-reload
Начиная с версии RHEL 7.2 доступна новая команда для просмотра некоторой информации по установленным таймерам:
# systemctl list-timers backup*