crontab 时间范围 a-b 也会在 b 之后运行吗?

问题描述 投票:0回答:4

假设我有一个每

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

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

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

cron
4个回答
35
投票

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 的范围内.


8
投票

@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

5
投票

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

参考文档


0
投票

我在

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。第一个数字必须小于或等于第二个数字。

© www.soinside.com 2019 - 2024. All rights reserved.