首页 > 代码库 > 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用法疑云