====== 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*