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