不定期安排工作

不定期安排工作

它非常简单,可以用来cron安排定期发生的作业。我希望某些事情发生得不那么频繁 - 例如,运行作业,然后等待 2 到 12 小时再重试。 (任何合理类型的随机性都可以在这里工作。)有没有好的方法可以做到这一点?

答案1

您可以使用命令“at”

at now +4 hours -f commandfile

或者

at now +$((($RANDOM % 10)+2)) hours -f commandfile

答案2

选项1

在 cron 中安排您的作业每小时(或每隔一小时)运行一次,但在作业前面加上类似这样的前缀(假设您SHELL=/bin/bash的 crontab 中有):

[ $[RANDOM % 12] -eq 0 ] || exit 0; YOUR_JOB_HERE

那么,作业每次按计划运行的机会大约是*十二分之一。

选项2

安排一个 cron 作业,在一天开始时计算出一些随机时间并用于at安排今天的所有运行。这要复杂得多,但允许您使用不同的随机分布。例如,您可能希望 2 小时比 12 小时更有可能。


印刷精美

*这种生成随机数的方法实际上是有偏差的。问题是最大值 (32767) 不是 12 的偶数倍(减一)。为了清楚地看到问题,请比较最大值是否为 11 (12×1-1 = 11)。 0 将产生 0,1 将产生 1,等等,一直到 11 产生 11。但如果是 13,则 12 产生 0,13 产生 1。所以 0 和 1 有产生它们的值,但 2-11 只有一个值,因此它们的可能性较小。因此,它是有偏见的。切换到使用除以最大值的公式并不能解决问题,它只是改变了有偏差的数字。实际的修复需要更多的代码(并且基本上涉及通过在不需要时再次尝试来伪造最大值)。

相关内容