我必须创建一个调度程序,该调度程序必须从第1天的上午9点到第二天的11.59pm,每周运行2天(星期四和星期五)。为此,我需要提供一个cron表达式。
0-0 0-0 9-23 ? * THU,FRI *
在两天之间的39个小时里,我没有获得如何创建cron的信息。它必须在每周四的上午9点到星期五的11.59pm之间每秒钟运行一次。
答案 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