假设我有一个每分钟运行一次的 crontab,20
并且我有一个小时范围可以变化,所以可以说a-b
,在一个示例中可能看起来像
*/20 5-23 * * * /usr/bin/cool_program
我的问题是,cron 是否也会在 23:00、23:20、23:40 和 00:00 运行?
假设我有一个每分钟运行一次的 crontab,20
并且我有一个小时范围可以变化,所以可以说a-b
,在一个示例中可能看起来像
*/20 5-23 * * * /usr/bin/cool_program
我的问题是,cron 是否也会在 23:00、23:20、23:40 和 00:00 运行?
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 的范围内。
@Alex 的回答是正确的,但是我花了一段时间才找到消息来源。
答案在man crontab.5
(或也info crontab
)在Debian、Mac OS X、FreeBSD(和其他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
它将在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