2

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

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

4

5 回答 5

3

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

主.sh:

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

睡眠30.sh:

#!/bin/bash
sleep 30
. $1

crontab:

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

这是不优雅的,但应该工作。

于 2012-11-26T18:46:36.540 回答
1

The shortest time interval you can use with cron is 1 minute. You could put a sleep in a bash script, but that would probably be the best you can do

于 2012-11-26T18:23:28.180 回答
1

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

* * * * * /path/cmd; sleep 30; /path/cmd
于 2018-08-08T09:56:35.187 回答
0

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

于 2012-11-26T18:35:05.250 回答
0

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

于 2012-11-26T18:40:16.947 回答