我想每 30 秒运行一次 cron 作业,但 cron 不允许调度作业的频率超过每分钟一次。
每 30 秒运行一次 cron 作业的最佳方法是什么?
这是一种在避免滑动窗口问题的同时执行此操作的方法。 创建两个脚本,主脚本(此处 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
它不优雅,但应该有效。
如果任务执行时间短且可以忽略不计,您可以这样做:
* * * * * /path/cmd; sleep 30; /path/cmd
您可以与 cron 一起使用的最短时间间隔是 1 分钟。你可以在 bash 脚本中睡觉,但这可能是你能做的最好的事情
简短的回答是,你不能在一分钟内安排 cron 作业。您可以使用sleep 30
但这会带来滑动窗口问题(任务现在间隔为 30 秒 + 任务的运行时间)。您可以将任务放在while true
循环中,并让它检查每次迭代是否至少过去了 30 秒,如果是这样 - 再次运行任务,如果没有sleep 1
<</p>
您可以升级到 FreeBSD 的最新测试版,它有一个特殊的新 cron 修饰符: @every_second。将 cronjob 包裹在 lockf 中,休眠 30 秒,运行作业,然后终止。这样,您可以每分钟运行两次。