在多个服务器上运行命令

在多个服务器上运行命令

我想在多个服务器上执行一个进程。我正在使用以下包装脚本。该脚本一次移动到一台服务器。我想更改它,以便它可以在多个服务器上执行。有办法做到吗?

#!/bin/bash
for ip in $(<ALL_SERVERS_IP); do
    # Tell the remote server to start bash, but since its
    # standard input is not a TTY it will start bash in
    # noninteractive mode.
    ssh -q "$ip" bash <<-'EOF'
        printf "%s\n" ================== "$(hostname) ::: Current date : $(date)" \
                            ==================
        ./remote 
    EOF
done

答案1

是的。 Try pdsh,它将同时在多个远程主机上执行命令。你的任务可以这样写:

pdsh -w ssh:$(echo $(<ALL_SERVERS) | sed -e 's/ /,/g') 'printf "%s\n" ...'

答案2

听起来您正在寻找GNU 并行。这几乎正​​是它的写作目的。在你的情况下,你会这样做:

parallel ./remote --sshloginfile ALL_SERVERS_IP

上面假设这ALL_SERVERS_IP是一个文本文件,每行一个 IP 或主机名。如果他们可以有不同的登录名,请按如下所示列出列表:

[email protected]
[email protected]
[email protected]

答案3

我知道一些工具,但最简单的是织物。看一下然后告诉我你的想法。

相关内容