【发布时间】:2017-01-16 06:44:09
【问题描述】:
我希望从10:30 AM 到8:30 PM 的每个15 mins 执行一个作业。
我试过30/15 10-20 * * *。但它忽略了时间11:00 AM、11:15 AM、12:00 PM、12:15 PM、1:00 PM、1:15 PM 等。
我想知道上述表达式的正确 cron 字符串。
【问题讨论】:
我希望从10:30 AM 到8:30 PM 的每个15 mins 执行一个作业。
我试过30/15 10-20 * * *。但它忽略了时间11:00 AM、11:15 AM、12:00 PM、12:15 PM、1:00 PM、1:15 PM 等。
我想知道上述表达式的正确 cron 字符串。
【问题讨论】:
# Run command every fifteen minutes between 10:30 and 20:30.
0,15,30,45 11-19 * * * …command…
30,45 10 * * * …command…
0,15,30 20 * * * …command…
第一行涉及从 11:00 到 19:45 的整个时间。第二行处理 10:30 和 10:45。第三行处理 20:00、20:15、20:30(假设您也希望它在 20:30 运行 - 如果您不这样做,那么修复很明显)。
它可能不漂亮,但它会完成工作。只要确保…command… 序列足够简单,重复就很明显了。
您可以在cron 中将第一行的第一个组件替换为0/15。您可以使用30/15 作为第二个,但它似乎并不比写的更清楚。我不确定是否有替换另一行的好方法。
另一种可能性是对其进行重构,以便指定每刻钟的小时范围:
0 11-20 * * * …command…
15 11-20 * * * …command…
30 10-20 * * * …command…
45 10-19 * * * …command…
您可以选择组合其中的前两个。
【讨论】:
crontab 格式。我写的内容也适用于第 7 版 Unix(1979)cron(当时没有单独的crontab 命令!)。对我来说,它不会引起痛苦;我会在crontab 条目中指定一个简单的shell 脚本(例如/root/cron/specific-task.sh),该脚本将包含任何复杂性。在我的书中,crontab 文件或条目中的内容应该尽可能简单,但不能更简单。如果需要指定 shell,就这样吧:sh /root/cron/specific-task.sh.