在Linux的世界中怎么玩转定时器任务
定时器使用
先是看到一段使用Linux Sevice
服务的脚本,意外发现在ExecStart
启动脚本中,它利用无限循环做定时任务的事情,非常突兀!
觉得既然用得了Linux Service
,那么,与之配套的cron
定时器服务是否更应该用起来,显得更专业呢?
另外,看到有人使用watch -n 10 "pkill procName"
来实现定时器测试输入动作。
本来用作持续观察命令输出的命令,竟然也可以另做它图,作为定时器来使用,也是非常有趣的!
那么,在Linux
的世界中,应该如何来使用定时任务呢?尝试记录下 😃
定时任务使用方法总结
方式 | 说明 |
---|---|
cron 服务簇 | 通过系统定时服务进行定时器任务的使用 |
watch | 通过-n 参数指定时间,以及提供另类的持续观察命令,达到定时执行效果。对于简单测试场景,确实非常实用 |
通过sleep ,或者比较系统时间进行模拟。类似使用独立线程来模拟定时器,好处是不容易受到其它因素干扰,但坏处也是明显的 |
使用cron定时系统服务
建议将定时任务配置文件放入/etc/cron.d
,和/etc/cron.{daily,weekly,monthly}
目录下。
- 配置方法,参考系统对应目录下已有部署定时任务
envsubst对模版文件进行脚本变量替换
在配置文件生成时,可以结合envsubst
命令,将定时任务配置模版文件进行变量替换
export SomeEnv=someValue
envsubst < config.template > config
cron与anacron的勾连
在原有设计上,anacron
用来实现更长周期的定时器任务,例如,{daily,weekly,monthly}
级别的定时器任务。
但,现在Linux
发行版一般都会将二者合二为一,通过run-parts
相互调用勾连起来
- 直接在
/etc/crontab
配置文件中
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
- 勾连在
/etc/cron.d/0hourly和/etc/cron.hourly/0anacron
配置文件中
# /etc/cron.d/0hourly
# run-parts
01 * * * * root run-parts /etc/cron.hourly
# /etc/cron.hourly/0anacron
/usr/sbin/anacron -s
- 注: 某些
Linux
发行版存在/etc/anacrontab
配置的文件Linux
发行版,可以在配置文件中,通过START_HOURS_RANGE
参数,指定长周期任务在一天内什么时间段执行
附录
# 一行无限循环的定时脚本
while true; do sleep 1; echo "Hello World!"; done
参考
- cron
- anacron
- envsubst