欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux定时器之crontab命令格式配置

程序员文章站 2022-06-17 14:25:36
...

 

命令还算经常用,只是时间格式有时候没记住,这里笔录一下吧。

crontab -l  列出crontab文件

crontab -e 编辑 

注意: %在crontab中被认为是newline,要用\来escape才行;比如有"date +%Y%m%d",必须替换为"date +\%Y\%m\%d"

crontab -r  删除  如果不希望删除写好的crontab文件,在该crontab文件前添加#将该文件注释掉。

 

crontab中的输出配置:

crontab中经常配置运行脚本输出为:>/dev/null 2>&1,来避免crontab运行中有内容输出。

shell命令的结果可以通过‘> ’的形式来定义输出

/dev/null 代表空设备文件

> 代表重定向到哪里,例如:echo "123" > /home/123.txt

1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"

2 表示stderr标准错误

& 表示等同于的意思,2>&1,表示2的输出重定向等同于1,上述中就表示也输出到空设备;

 

尤其要注意的定时时间的配置

第1列分钟1~59

第2列小时1~23(0表示零点)

第3列日1~31

第4列月1~12

第5列星期0~6(0表示星期天)

 

crontab的格式:

分 时 日 月 星期 需要运行的命令

 

这有一些例子:

30 21 * * * rm /admin/logs/error.log

上面的例子表示每晚的21:30 删除指定日志

 

45 4 1,10,22 * * rm /admin/logs/error.log

上面的例子表示每月1、10、22日的4 : 45 删除指定日志

 

10 1 * * 6,0 rm /admin/logs/error.log

上面的例子表示每周六、周日的1 : 10 删除指定日志

 

0,30 18-23 * * * rm /admin/logs/error.log

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟 删除指定日志

 

0 23 * * 6 rm /admin/logs/error.log

上面的例子表示每星期六的11 : 00 pm 删除指定日志

 

0 */1 * * * rm /admin/logs/error.log

每一小时删除指定日志

* */1 * * * rm /admin/logs/error.log(相当于不限时间按最小粒度 * * * * * sh

每分钟删除指定日志

 

0 23-7/1 * * * rm /admin/logs/error.log

晚上11点到早上7点之间,每隔一小时 删除指定日志

 

0 11 4 * mon-wed rm /admin/logs/error.log

每月的4号与每周一到周三的11点 删除指定日志

 

0 1 1 jan * rm /admin/logs/error.log

一月一号的1点 删除指定日志

 

注意:上面有个蓝色注意点,就是不同单位时间的关系。

 

比如每5分钟查看一下日志,我们可以这么写:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /command

这样肯定是没有问题的,但是就写书写起来非常复杂,简化一下可以这么写:

0-55/5 * * * * /command

这样的写法已经简化了很多,大家还是觉得麻烦,那么可以这样写:

*/5 * * * * /command

这句就表示在0,5,10,15,20,25,30,35,40,45,50,55分钟的时候执行命令,即每隔5分钟执行命令。

 

注意:这里也有一个注意点(除号 / 的使用):

 

只有能够被整除的步长值才能表达与我们理解相一致确切的含义,对于分钟来说只有 */2,*/3,*/4,*/5,*/6,*/10,*/12,*/15,*/30,对于小时来说则只有*/2,*/3,*/4,*/6,*/8,*/12。

对于日期来说,如果使用*/5,则不能保证每5天执行一次,到月底的时候可能只执行1天、2天或3天后就停止了,这取决与大小月、平闰年。这是因为cron 是没有状态的,它不能够记录上次执行的是什么时间,只能根据当前的时间来判断是否需要执行。

而对于分钟位 */13 来说,表示在分钟这个范围内,即0-59分钟,任务会每13分钟执行一次。

即:0,13,26,39,52;之后再间隔8分钟,就会又重新执行新的一小时内的分钟定时间隔了。

 

 

 

相关标签: linux shell