为Linux命令添加随机延迟


13

我正在使用func在我们的服务器上执行并行命令。

前几天,我们遇到了一个问题,当puppetvia 的服务重新启动func使我们所有的服务器同时受到攻击puppetmaster时。

我的问题:如何在一组服务器上执行相同的确切命令,同时增加在各个服务器上执行之前的延迟?

例如: random_delay && service puppet restart

我对random_delay命令部分很感兴趣。

Answers:


25

sleep $((RANDOM % MAXWAIT)) 其中MAXWAIT是所需的最大延迟,以秒为单位。


如果您将其呼应,似乎经常卡在“ 1”上...有想法吗?
Corey S.

也注意到这一点。试试这个,因为x in 1 2 3 4 5; 做RANDOM = $ x; i = $((RANDOM%10)); 回声$ i; 睡觉$ i; 完成显然,S19N的答案中的MAXWAIT实际上与我的答案中的10相似。更改RANDOM种子,并将木偶代码添加到您当然想要的任何内容。
dtbnguyen 2012年

2
@CoreyS。$ RANDOM是最后一个值的种子,因此是循环(我被卡在5/6 / 7、2 / 7和5上)。sleep $((RANDOM % MAXWAIT))是正确的方法。我将这样编辑答案。
杰夫·弗兰

这在Pro Puppet中称为splay。它用于防止许多机器同时执行相同操作的雷电群。除此之外,我还成功完成了使用的cron调度fqdn_rand
弗朗索瓦·博索莱尔

这似乎取决于bash特定的扩展。在dash echo sleep $((RANDOM % 900))回报sleep 0。这意味着在#!/bin/sh脚本或crontab之类的地方使用它是不安全的。(问题似乎是dash无法理解的$RANDOM
Gert van den Berg

1

我非常喜欢S19N的创新型解决方案,但还不够理想。我只说这不是理想的,因为什么时候实际发生还是很大的不确定性。我宁愿能够保证何时发生什么事情,何时发生什么事情。

木偶编排实际上是一个很难的问题。
“最佳实践”解决方案之一是使用MCollective,它不仅使您可以配置人偶在计算机集群上运行的时间,还可以将其用于其他类似的编排问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.