我需要创建一个调度程序,它需要在每周的两天(星期四和星期五)从第一天早上9点开始运行,持续2天直到第二天晚上11点59分。为此,我需要提供一个cron表达式。
0-0 0-0 9-23 ? * THU,FRI *
我不知道如何创建在两天之间每隔39小时运行的定时任务。它需要在每周的星期四上午9点到星期五晚上11点59分之间每秒钟运行一次。
我认为你的需求并不存在一个有效的单个cron语法。 此外,正如其他用户在Cron中已经指出的那样,您不能低于1分钟的频率。
话虽如此,您可以在脚本代码中放置“sleep 1,2,3(...)”来创建偏移量(有点疯狂)。这样,即使每分钟执行一次,只有一个脚本真正被执行,而其他脚本则在等待它们准确的秒数启动。 我永远不会这样做,但作为最后的手段......
有几种方法可以黑掉它。但是你不能保证你会得到完美的执行结果。这个想法是编写一个脚本,每秒钟执行一次命令,持续1分钟。我们选择一分钟,因为这是cron能处理的最小分辨率。因此,如果你的系统停机,cron将在第一次机会时重新启动程序。
脚本:cron_per_second
#!/usr/bin/env bash
for i in {0..59}; do
"$@" &
sleep 1
done
wait
$ ./cron_per_second date -Ins
定时任务:
# 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点到12点之间每分钟运行一次。第二项任务在每周五每分钟运行一次。
警告:并不是说在两个连续的cronjob之间没有重叠。如果你的crontab很大,可能会出现一个任务在xx:yy:01执行,而下一个任务在xx:yy+1:00执行。因此,子秒级别的cronjob可能会从两个cronjobs中都运行xx:yy+1:00。
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
man -s5 crontab
中所述,“cron(8)每分钟检查一次cron条目”。 - David Yockey