我想在多个服务器上执行一个进程。我正在使用以下包装脚本。该脚本一次移动到一台服务器。我想更改它,以便它可以在多个服务器上执行。有办法做到吗?
#!/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
我知道一些工具,但最简单的是织物。看一下然后告诉我你的想法。