前言
正如闹钟对于日常生活的重要性一样,linuxcrontab定时任务在开发中是必不可少的工具,诸如:每六个月清理一次日志,每天凌晨12.00重启服务等多种场景,都可以用crontab搞定。
本文测试环境为Ubuntu22.04,某些细节不同的发行版可能有所差异,以各自手册为主。
快速开始
友情提示:在你的.bashrc文件中设置你常用的编辑器,比如:exportEDITOR=vim,后续编辑的时候就不会弹出其他陌生的编辑器了。
输入crontab-e并在文件末尾输入*/2****date/tmp/test-crontab.txt(后续会对这句话的含义做解释,此处先不用纠结),多等待几分钟后看看/tmp目录下生成的test-crontab.txt文件中的内容。
如上图所示,我们实现了每隔2分钟将当前日期追加到文件中的功能,一行命令一句表达式,crontab的使用就是这么简单。
在详细解释crontab表达式的具体含义之前,来看看其他的操作。
crontab-l查看当前运行的定时任务
crontab-r删除所有的定时任务
注意:如果要停止某个定时任务,只需要-e的时候使用#将其注释即可。
表达式
.----------------分minute(0-59)
.-------------时hour(0-23)
.----------天dayofmonth(1-31)
.-------月month(1-12)ORjan,feb,mar,apr...
.----周dayofweek(0-7)(Sunday=0or7)ORsun,mon,tue,wed,thu,fri,sat
mhdommondow
特殊的取值
*所有,例如对于minute来说,*等价于0-59,数组,例如1,3,5-段,例如1-3等价于1,2,3/间隔,例如对于minute来说,*/2代表每2分钟
它们也可以结合在一起使用,如:1-5/2
特殊的写法
除了上面的表达式之外,还有类似编程语法中的语法糖,更加直白一点
rebootRunonce,atstartup.
yearlyRunonceayear,"*".annually(sameasyearly)monthlyRunonceamonth,"**".weeklyRunonceaweek,"00**0".dailyRunonceaday,"00***".midnight(sameasdaily)hourlyRunonceanhour,"0****".举个例子
说的再多,不如实战几个例子来得更加清晰易懂
50***每天的00:05点
**每个月1号的14:15
**1-5每周从周一到周五22:00
虽然crontab不复杂,但是也没那么直白,需要大脑稍微翻译一下,并且crontab不太方便测试任务什么时间运行,此时借助在线的