我愿意每 45 分钟运行一次脚本(不是每小时的第 45 分钟)
例如 10:00、10:45、11:30、12:15 等。
*/45 * * * *
我不确定这是正确的表达方式。
我怀疑(编辑:我现在很确定)它没有做你想做的事:字段是分开的,*/45
几分钟之内只不过是0,45
. */45
如果不做这项工作,我会使用以下三个条目:
0,45 0-23/3 * * *
30 1-23/3 * * *
15 2-23/3 * * *
如果您查看entry.c
vixie cron 源中的文件,您会注意到每个条目的每个字段都被解析get_list
并表示为该字段允许值的位图。这几乎排除了任何“智能”解释,因为在这个阶段已经失去了*/45
和的区别0,45
......但是有一个MIN_STAR
标志,设置*
在几分钟内(包括*/45
)。所以我们看一下cron.c
,一个MIN_STAR
被检查的地方,以了解它与我们的问题无关。现在我们确定这*/45
意味着“每小时的每 45 分钟”:0:00、0:45、1:00、1:45 等等。
这里有两个答案自信地说相反,引用手册中的一段不幸的段落:
星号后也允许执行步骤,因此如果您想说“每两个小时”,只需使用“*/2”
我们很幸运有一个 24 小时的一天,包含偶数小时,使得“每天从 0:00 开始每两个小时”和“通常每两个小时”无法区分。太糟糕了,手册没有深入到记录不平凡的案例,给人的印象* */22
是每 22 小时一次。它不是。带有步骤的星号只是使用它的字段中值列表的简写;它不与其他字段交互。
在 cron 的基本计时,您的系统每分钟检查一次以查看是否有任何 cronjobs 可以运行。它会查看你的 crontab,如果该运行了,噗,它运行了!但是每 45 分钟是一个间隔,它总是会在钟面上达到 15 分钟的标记。例如从零开始,第一个是 0:45。接下来将是从零开始的 90 分钟,或 1:30,下一个将是 2:15... 您可以很容易地看到您想要执行脚本的每个实例的时间,分针将在 12、3、 6 或 9。如果您每 15 分钟执行一次脚本,并检查小时是否正确,则可以执行您的脚本。您可能会使用表格,或者也可能使用模数功能。干杯!