Crontab 每 15 分钟运行一次,除了凌晨 3 点?

Posted

技术标签:

【中文标题】Crontab 每 15 分钟运行一次,除了凌晨 3 点?【英文标题】:Crontab run every 15 minutes except at 3AM? 【发布时间】:2012-02-04 13:19:33 【问题描述】:

除了凌晨 3 点以外,是否可以每 15 分钟(每小时等)运行一次 cronjob?

我有另一个特殊的 cronjob 我想在凌晨 3 点运行,但我不希望另一个同时运行...

【问题讨论】:

最简单的方法是让 crontab 执行一个脚本来检查它是否是凌晨 3 点,如果是,就退出。 理想情况下,您应该使用某种锁定系统。为一个作业设置一个共享标志,并检查该标志是否为第二个作业设置。 cmets 中有两个答案? 【参考方案1】:

只有一条 cron 行,没有。三个,是的:

# Every 15 minutes except for 3:00-3:59
*/15 0-2,4-23 * * * thejob
# 3:15, 3:30, 3:45
15-45/15 3 * * * thejob
# 3:00 dead
0 3 * * * otherjob

【讨论】:

迄今为止,这是我发现的最清晰的例子。虽然在修改richrosa 的响应后可以在两行中使用,但这一行更容易阅读。谢谢你的分享! +1 @bwright,您根据@richrosa 的回答编写的两行将等同于此答案中的第 2 行和第 4 行。此外,IMO,15,30,4515-45/15 更具可读性。【参考方案2】:

我自己制定了解决方案,但我想看看其他人的想法!

我把它放在我想要的脚本的顶部。我希望它也不会在半小时内运行,所以它不会同时运行。

在脚本之上:

if [ $(date +%M) = 00 ] || [ $(date +%M) = 30 ]
then
exit
fi

cron 行:

*/15 * * * * ~/path/to/file

希望有人也使用我的解决方案。

【讨论】:

这很好,但有一个问题。逻辑分布在 2 个文件中:一个是 cronjob,另一个是您的实际命令。有人很容易看不到这两种解决方案,并认为一定存在 cronjob 冲突。【参考方案3】:
 0,15,30,45 0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * your cron job

【讨论】:

这不会在凌晨 3:15、凌晨 3:30、凌晨 3:45 运行,因此这些时间您需要在 crontab 中再添加一行。

以上是关于Crontab 每 15 分钟运行一次,除了凌晨 3 点?的主要内容,如果未能解决你的问题,请参考以下文章

Crontab 格式化 - 每 15 分钟

crontab 定时器

如何每 X 分钟运行一次 cronjob?

crontab

crontab中如何实现每隔多少天执行一次脚本

crontab怎样每隔5分钟执行一次脚本