9

假设我有一个每分钟运行一次的 crontab,20并且我有一个小时范围可以变化,所以可以说a-b,在一个示例中可能看起来像

*/20 5-23 * * * /usr/bin/cool_program

我的问题是,cron 是否也会在 23:00、23:20、23:40 和 00:00 运行?

4

3 回答 3

29

GK27的回答并没有完全回答问题,所以让我澄清一下:

cron当时间与提供的表达式匹配时将运行作业。您的表达式告诉它在分钟可被 20 ( */20) 整除时运行,而您的小时范围告诉它在小时处于指定范围内时运行 ( 5-23)。其余三个*告诉它匹配任何一天、一个月和一周中的任何一天。

因此,第一个作业将在 05:00 运行,因为小时 ,05在 5 到 23 范围内,分钟 ,00可以被 20 整除。最后一个作业将在 23:40 运行,因为小时 ,23在范围内5 到 23 分钟 ,40可以被 20 整除。它不会在 00:00 运行,因为小时 ,00不在 5 到 23 的范围内。

于 2016-03-24T15:55:00.753 回答
7

@Alex 的回答是正确的,但是我花了一段时间才找到消息来源。

答案在man crontab.5(或也info crontab)在DebianMac OS XFreeBSD(和其他Posix系统)上:

数字范围是允许的。范围是用连字符分隔的两个数字。指定的范围包括在内。例如,“小时”条目的 8-11 指定在 8、9、10 和 11 小时执行。

对于我的应用程序,我希望在工作时间(上午 9 点到下午 5 点)每 5 分钟运行一次脚本,在此之外每 5 分钟运行一次。不幸的是,范围不能跨越午夜,因此您需要指定 3 个范围(早上、营业时间、晚上)

*/5 0-8,17-23   * * *   outside-hours.sh
*/5 9-16   * * *   business-hours.sh

这应该运行

outside-hours.sh  first at 00:00 and finally at 08:55
business-hours.sh first at 09:00 and finally at 16:55
outside-hours.sh  first at 17:00 and finally at 23:55
于 2018-05-22T04:02:33.313 回答
4

它将在minute可被 20 整除且小时5-23包含在内时执行:

* 20 – every 20 minutes from 0 to 59
* 5-23 – 5 to 23 inclusive
* * – Every day
* * – Every month
* * - EvryDay of the Week

第一次是 5:00,最后一次是 23:40

crontab.guru

参考文件

于 2013-05-03T05:56:46.000 回答