我希望能够同时重启一堆服务器(在bash脚本中) 目前,我所做的是这样的:
function reboot_servers() {
echo "Rebooting servers..."
for server in "${servers[@]}"
do
sshpass -p 'password' ssh -o StrictHostKeyChecking=no root@$server 'reboot'
done
}
(servers
是一个包含4个服务器的数组,有时是8个,将来可能更多)
现在,我知道理论上我不能真正让它们在完全同时重新启动,但我希望它尽可能同时,并且上面的解决方案是远的对我来说是最佳的
在我当前的脚本中,如果每次迭代平均花费几百毫秒(ssh登录有时会滞后并且不可预测),那么从第一台服务器启动reboot
命令到最后一条命令执行的时间都会过去达到秒,这是完全无效的。
我还应该提到所有服务器中的时钟都是同步的,并且为了给你一些上下文,上面的函数正在一遍又一遍地运行,类似于此;
function main() {
iteration=0
while true
do
echo "------> Iteration $((++iteration)) <------"
wait_random_time
reboot_servers
wait_for_servers
if bug_reproduced
then
echo "Bug was reproduced."
exit 0
else
echo "No reproduction, trying again..."
fi
done
}
我读了一些关于at
命令的内容,但我不确定如何在这里使用它。
答案 0 :(得分:0)
我建议使用parallel-ssh。
答案 1 :(得分:0)
我最终使用pdsh
,结果令人印象深刻......
$> pdsh -l root -w server0[0-3] date "+%T.%3N"
server00: 12:29:45.845
server01: 12:29:45.830
server02: 12:29:45.870
server03: 12:29:45.893