shell:同时重启一堆服务器

时间:2017-05-18 21:32:20

标签: linux bash shell

我希望能够同时重启一堆服务器(在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命令的内容,但我不确定如何在这里使用它。

2 个答案:

答案 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