该文章概述了在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部分。
相关文章
「Cron」- 使用技巧
「Cron」- 安装及注意事项
「crontab」- 周期任务的配置文件
参考文献
Systemd 定时器教程
如何使用 systemd 中的定时器
linux基础命令介绍十四:定时任务
systemd.timer 中文手册
Systemd 定时器教程
如何使用 systemd 中的定时器
systemd/Timers