调度程序的Cron表达式

时间:2019-07-09 10:31:46

标签: cron scheduler

我必须创建一个调度程序,该调度程序必须从第1天的上午9点到第二天的11.59pm,每周运行2天(星期四和星期五)。为此,我需要提供一个cron表达式。

0-0 0-0 9-23 ? * THU,FRI *

在两天之间的39个小时里,我没有获得如何创建cron的信息。它必须在每周四的上午9点到星期五的11.59pm之间每秒钟运行一次。

3 个答案:

答案 0 :(得分:0)

我认为您不存在有效的单个cron语法。 此外,正如Cron中其他用户已经提到的那样,您的频率不能低于1分钟。

也就是说,您可以创建偏移量,在脚本代码中放入“ sleep 1,2,3(...)”(有点疯狂)。这样,即使每分钟执行一次,实际上也只执行一个脚本,而其他脚本则等待它们的确切执行时间。 我永远不会这样做,但是作为最后的手段...

答案 1 :(得分:0)

有几种方法可以破解此漏洞。但是您不能保证会得到完美的执行。这个想法是编写一个脚本,该脚本每秒执行一次命令,持续1分钟。我们选择一分钟,因为这是cron可以处理的最小分辨率。因此,如果您有系统停机时间,则cron会在有机会时重启程序。

脚本: cron_per_second

#!/usr/bin/env bash
for i in {0..59}; do
    "$@" &
    sleep 1
done
wait

这将执行带有相应参数的命令60次。每个命令都在后台执行,以避免由于该命令的执行时间而引起的延迟。在执行下一个命令之前,我们睡1秒钟。您只需执行以下操作即可查看其工作原理:

$ ./cron_per_second date -Ins

crontab:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |   .---------- day of month (1 - 31)
# |  |   |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |   |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |   |  |  |
# *  *   *  *  *   command to be executed
  * 9-23 *  *  4   /path/to/cron_per_second command arg1 arg2 arg3
  * *    *  *  5   /path/to/cron_per_second command arg1 arg2 arg3

第一个条目的运行时间是星期四的每分钟9点至午夜。第二个条目在星期五每分钟运行一次。

警告:不一定要说两个相应的cronjob之间没有重叠。如果您的crontab很大,则可能在xx:yy:01执行作业,而下一个作业在xx:yy + 1:00执行。因此,亚秒级cronjob可能在两个cronjobs中都运行两次xx:yy + 1:00。

答案 2 :(得分:0)

0 * 9-23 ? * THU-FRI *

您可以尝试一下。 该表达式的描述可以通过下面的链接进行 https://cronexpressiondescriptor.azurewebsites.net/?expression=0++9-23+%3F++THU-FRI+*&locale=en

还有一个在线实用程序可以生成cron表达式,您可能会发现它很有用。 https://www.freeformatter.com/cron-expression-generator-quartz.html