每 30 秒运行一次 cron 作业的最佳方式是啥? [复制]

Posted

技术标签:

【中文标题】每 30 秒运行一次 cron 作业的最佳方式是啥? [复制]【英文标题】:Which is the best way to run a cron job every 30 seconds? [duplicate]每 30 秒运行一次 cron 作业的最佳方式是什么? [复制] 【发布时间】:2012-11-14 06:43:26 【问题描述】:

我想每 30 秒运行一次 cron 作业,但 cron 不允许调度作业的频率高于每分钟一次。

每 30 秒运行一次 cron 作业的最佳方式是什么?

【问题讨论】:

【参考方案1】:

这是一种避免滑动窗口问题的方法。创建两个脚本,您的主要脚本(此处为 main.sh)和睡眠脚本(sleep30.sh):

main.sh:

#!/bin/bash
date >>/tmp/main.out

sleep30.sh:

#!/bin/bash
sleep 30
. $1

crontab:

* * * * * /pathtoscripts/sleep30.sh /pathtoscripts/main.sh
* * * * * /pathtoscripts/main.sh

不优雅,但应该可以。

【讨论】:

【参考方案2】:

您可以使用 cron 的最短时间间隔是 1 分钟。 您可以在 bash 脚本中设置 sleep,但这可能是您能做的最好的事情

【讨论】:

【参考方案3】:

如果任务执行时间短,可以忽略,可以这样:

* * * * * /path/cmd; sleep 30; /path/cmd

【讨论】:

【参考方案4】:

简短的回答是您不能在一分钟内安排 cron 作业。您可以使用sleep 30,但这会引入滑动窗口问题(任务现在间隔为 30 秒 + 任务的运行时间)。您可以将任务放在 while true 循环中,并让它检查每次迭代是否至少经过 30 秒,如果是,则再次运行任务,如果不是 sleep 1

【讨论】:

【参考方案5】:

您可以升级到最新的 FreeBSD 测试版,它有一个特殊的新 cron 修饰符:@every_second。 将您的 cronjob 包裹在 lockf 中,休眠 30 秒,运行该作业,然后终止。这样一分钟可以运行两次。

【讨论】:

以上是关于每 30 秒运行一次 cron 作业的最佳方式是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

每 5 分钟运行一次 Cron 作业,持续 10 秒

Laravel 5 每 30 秒安排一次作业

使用 Node-Cron 每 10 秒执行一次 Cron 作业

node-cron 每 3 小时运行一次作业

每天 2:30 运行一次 cron 作业?

运行 PHP 的 Cron 作业,它运行另一个 PHP