文章摘要: 本文主要描述了systemd服务timer类的应用。
[Timer]
设定参数 | 参数意义说明 |
OnActiveSec | 当 timers.target 启动多久之后开始执行 |
OnBootSec | 当开机完成后多久之后才执行 |
OnStartupSec | 当systemd第一次启动之后过多久才执行 |
OnUnitActiveSec | 配置文件所管理的那个服务在最后一次启动后,隔多久再执行一次 |
OnUnitInactiveSec | 配置文件所管理的那个服务在最后一次停止后,隔多久再执行一次。 |
OnCalendar | 使用实际时间 (非循环时间) 的方式来启动服务。 |
Persistent | 当使用 OnCalendar 的设定时,指定该功能要不要持续进行,通常是设定为 yes,类似于anacron的功能 |
Unit | service与timer的名称相同时,一般不需要设置,如果名称不相同时(比如多个timer对应同一个service时,需要通过Unit项指定service |
示例: 开机后2小时开始执行一次,然后每两天要执行一次
# /etc/systemd/system/backup.timer
[Unit]
Description=backup timer test
[Timer]
# 开机后执行延时,单位为秒,可采用hrs,days来指定单位
OnBootSec=2hrs
# 定时时间
OnUnitActiveSec=2days
# timer与service名称一致时,不需要指定Unit项
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable backup.timer
Created symlink from /etc/systemd/system/multi-user.target.wants/backup.timer to /etc/systemd/system/backup.timer.
# systemctl restart backup.timer
# systemctl list-unit-files | grep 'backup'
backup.service disabled #个不需要启动!只要 enable backup.timer 即可!
backup.timer enabled
显示 timer 服务启动的时间:
# systemctl show time
ConditionTimestamp=五 2019-11-08 07:42:28 CST
显示 backup.service 上次执行的时间:
# systemctl show backup.service
ExecMainExitTimestamp=五 2019-11-08 07:52:28 CST
下一次执行距离 timers.target 的时间
# systemctl show backup.timer
NextElapseUSecMonotonic=2d 19min 11.540653s
由于 timer 是由 timers.target 这个 unit 所管理的,backup.timer 所纪录的下次运行时间,其实是与 timers.target 所纪录的时间差。
一个固定日期运作示例: 每周日2点整执行
# /etc/systemd/system/backup2.timer
[Unit]
Description=backup server timer test2
[Timer]
OnCalendar=Sun *-*-* 02:00:00
Persistent=true
# 当定时任务与执行任务名称不一致时,需要指明service
Unit=backup.service
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable backup2.timer
# systemctl start backup2.timer
# systemctl show backup2.timer
NextElapseUSecRealtime=50y 8month 5d 8h
下次执行时间:
50y = 1970 + 50 = 2020(从1970年开始算)
8month = 9月(从0开始算)
5d = 6日
8h = 08:00:00
8h 2min 30s = 08:02:30
- 阅读全文 -