「systemd」- Timer:由systemd提供的定时任务

  CREATED BY JENKINSBOT

该文章概述了在systemd中使用Timer来设置定时任务的方法,并提及了一些细节上的东西。

!!!这篇文章是一个概要,而不是一份详细的教程。

在Linux中,任务调度器Cron广为认知。但是Cron的粒度只能控制到分钟,不能到秒,但是systemd的Timer可以。

第一步、创建单元文件

创建Timer单元文件。假设以mytimer.timer为文件名,格式大体如下:

[Unit]
Description=Runs mytimer every hour

[Timer]
OnUnitActiveSec=1h
Unit=mytimer.service

[Install]
WantedBy=multi-user.target

如上所示,在systemd的Timer单元文件中,它并不包含具体要执行的命令,而是指定了一个要执行的Service单元。比如,上面的mytimer.service单元,该Service单元文件中包含了具体要执行的任务,所以你要先创建Service单元文件。这里就不再展开。

该mytimer.tiemr文件要放在/etc/systemd/system目录中。

第二步、启动定时任务

同样的,执行sytemctl start mytimer.timer来启动定时任务。

如果要开机自启动,则可以执行systemctl enable mytimer.timer命令。

常见问题

#1 定时任务没有立即启动

执行systemctl start foo.timer以后,没有立即执行对应的单元,原因参考「Systemd timer not starting its service unit」一文。

解决办法
在foo.timer单元文件的[Unit]部分加入Requires=bar.service部分。

参考文献

Systemd 定时器教程
如何使用 systemd 中的定时器
linux基础命令介绍十四:定时任务
systemd.timer 中文手册
Systemd 定时器教程
如何使用 systemd 中的定时器
systemd/Timers