Systemd Timer 介绍
Systemd同样可以设置定时执行任务。此功能旨在与服务一起使用,也可以用于其他任何功能。它是cron的强大替代品。
服务创建
假设每天启动apache网站的备份脚本。
创建/var/www/backup
目录:
# mkdir /var/www/backup
创建/var/www/backup/backup.sh
文件并粘贴以下行:
#!/bin/bash
DAYMONTH=`date "+%d"`
/bin/tar --selinux -czvf /var/www/backup/backup-$DAYMONTH.tgz /var/www/html &>/dev/null
添加可执行权限:
# chmod +x /var/www/backup/backup.sh
创建/usr/lib/systemd/system/backup.service
文件并粘贴以下行:
[Unit]
Description=Backup of my apache website
[Service]
Type=simple
ExecStart=/var/www/backup/backup.sh
[Install]
WantedBy=multi-user.target
还有其他一些选项,例如OnCalendar
:
- OnActiveSec 定义了与计时器本身被激活的时刻相关的计时器。
- OnBootSec 定义了相对于计算机启动时间的计时器。
- OnStartupSec 定义相对于systemd启动时间的计时器。
- OnUnitActiveSec 定义了一个计时器,该计时器与上一次激活计时器的单位有关。
- OnUnitInactiveSec 定义了一个计时器,该计时器与上一次停用计时器的时间有关。
在RHEL 7.2版本有三个新的选项:
- AccuracySec 定义了计划在计时器内经过的时间窗口(默认为1分钟)。
- Persistent 一个布尔值(如果设置为true),则最后一次触发服务单元的时间存储在磁盘上。然后,此信息将在下次重新启动时使用,以执行过期的计时器事件,该事件由于系统已关闭而无法发生。
- WakeSystem 一个布尔值(如果设置为true),以这种方式配置的计时器将导致系统从系统挂起状态恢复。
随着RHEL 7.3自带的RandomizedDelaySec选项,通过几秒钟的随机数在较长一段时间后发生的时间表事件价差工作量和避免几个事件在同一时间执行(BZ#1305279)。
日期语法
前面的每个选项都使用以下日期语法:
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
如果您决定更改备份频率,请在修改OnCalendar值后,不要忘记键入:
# systemctl daemon-reload
在RHEL 7.2版本中,可以使用新命令来获取有关计时器的其他信息。
要获取有关备份计时器的一些信息,请输入:
# systemctl list-timers backup*
NEXT LEFT LAST PASSED UNIT ACTIVATES
Thu 2016-01-14 00:00:00 CET 44min left n/a n/a backup.timer backup.service
1 timers listed.
Pass --all to see loaded but inactive timers, too.
其他资源
ArchLinux维基提供了一个相关文章Systemd timers。