systemctl timer systemd 设置定时任务

转载自博客 http://www.ruanyifeng.com/blog/2018/03/systemd-timer.html

Timer 单元

定时执行某个Service,必须定义 Timer 单元。

范例

/usr/lib/systemd/system目录里面,新建一个mytimer.timer文件,写入下面的内容。

[Unit]
Description=Runs mytimer every hour
[Timer]
OnUnitActiveSec=1h
Unit=mytimer.service
[Install]
WantedBy=multi-user.target

解释

这个 Timer 单元文件分成几个部分。
[Unit]部分定义元数据。

[Timer]部分定制定时器。Systemd 提供以下一些字段。

  • OnActiveSec:定时器生效后,多少时间开始执行任务
  • OnBootSec:系统启动后,多少时间开始执行任务
  • OnStartupSec:Systemd 进程启动后,多少时间开始执行任务
  • OnUnitActiveSec:该单元上次执行后,等多少时间再次执行
  • OnUnitInactiveSec: 定时器上次关闭后多少时间,再次执行
  • OnCalendar:基于绝对时间,而不是相对时间执行
  • AccuracySec:如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒
  • Unit:真正要执行的任务,默认是同名的带有.service后缀的单元
  • Persistent:如果设置了该字段,即使定时器到时没有启动,也会自动执行相应的单元
  • WakeSystem:如果系统休眠,是否自动唤醒系统

上面的脚本里面,OnUnitActiveSec=1h表示一小时执行一次任务。其他的写法还有OnUnitActiveSec=--* 02:00:00表示每天凌晨两点执行,OnUnitActiveSec=Mon --* 02:00:00表示每周一凌晨两点执行,具体请参考官方文档

查看所有正在运行的定时器

systemctl list-timers

查看 mytimer.timer 的日志

journalctl -u mytimer.timer
本人水平有限,还在不断学习中 难免有很多错误或者遗漏,望见谅
原文地址:https://www.cnblogs.com/faberbeta/p/15662932.html