假设我有一个每
20
分钟运行一次的 crontab,并且我有一个可以变化的小时范围,所以可以说 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 的答案是正确的,但是我花了一段时间才找到来源。
答案就在
Debian、
Mac OS X、FreeBSD(以及其他 Posix 系统)上的
man crontab.5
(或info crontab
):
允许数字范围。范围是用 分隔的两个数字 连字符。指定范围包括在内。例如,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
我在
man 5 crontab
中找到了答案。范围是允许的。
The time and date fields are: field allowed values ----- -------------- minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sunday, or use names) A field may contain an asterisk (*), which always stands for "first-last". Ranges of numbers are allowed. Ranges are two numbers separated with a hyphen. The specified range is inclusive. For
例如,“小时”条目的 8-11 指定在 8 小时执行, 9、 10 和 11。第一个数字必须小于或等于第二个数字。