首页 > 代码库 > crontab用法疑云
crontab用法疑云
crontab的教程里面,一般都说 */N 表示每隔N分钟/小时执行一次。
偶尔的教程里会讲到:这个N应该被60整除才行。
我在网上基本上没有搜到,如果N不被60整除的时候,会是怎样?
问题起因最开始在于:
个人有个crontab任务,希望设置成40分钟执行一次。但是设置了*/40之后发现,任务总是会在整点和40分的时候执行。
查看了下任务设置,并没有设置在整点执行。然而,整点执行之后,隔40分钟之后执行这一点又是符合crontab设置的。
所以,奇怪之处在于,为何整点会执行?
重新设定了一个不会被整除的数:*/47。查看任务,每次执行时打个log。发现:在整点和47分的时候都会执行。
联想到crontab任务的执行标准,是每分钟判断一次某个任务是否应该被执行,那么,crontab的判断标准应该如下:
1. 每分钟执行一次,判断任务是否应该执行;
2. 判断标准为:当前分钟数除以设置分钟数,余数为0则可以执行。
这样,设置为*/40或*/47的时候,在整点时刻(分钟数为00),除以设置分钟数(40和47),余数为0,故均会被执行。
由此可见,某些教程里说的,“设置的N应该被60整除才行”的意思是:如果N能被60整除,则会相当于每隔N分钟执行一次,一个小时正好执行60/N次;如果N不能被60整除,则在能整除和整点(除完余数为0)的时候都会执行。
下面为测试文件,设定为*/23分钟执行。
75 ==> t3 <==
76 Thu Jan 15 10:46:01 CST 2015
77 Thu Jan 15 11:00:01 CST 2015
78 Thu Jan 15 11:23:01 CST 2015
79 Thu Jan 15 11:46:01 CST 2015
80 Thu Jan 15 12:00:01 CST 2015
81 Thu Jan 15 12:23:01 CST 2015
82 Thu Jan 15 12:46:01 CST 2015
83 Thu Jan 15 13:00:01 CST 2015
84 Thu Jan 15 13:23:01 CST 2015
85 Thu Jan 15 13:46:01 CST 2015
crontab用法疑云