0

我已经设置了几个 EC2 实例,它们都在主目录中有一个脚本。我想在每个 EC2 实例上同时运行脚本,即不经过循环。

我已经看到用于 OSX 的 csshX 用于终端交互式使用......但想知道命令行代码是什么来执行命令

ssh user@ip.address . test.sh

在所有实例中运行 test.sh 脚本,因为...

csshX user@ip.address.1 user@ip.address.2 user@ip.address.3 . test.sh 

不工作...

我想通过命令行执行此操作,因为我想通过将其添加到 shell 脚本中来自动化此过程。

和奖励积分......如果有一种方法可以将消息发送回发送命令的机器,它已完成运行脚本,那将是非常棒的。

4

1 回答 1

1

拥有一个在后台运行所有这些东西的主 shell 脚本是否足够好?例如,

#!/bin/sh
pidlist="ignorethis"
for ip in ip1 ip2
do
    ssh user@$ip . test.sh &
    pidlist="$pidlist $!" # get the process number of the last forked process
done

# Now all processes are running on the remote machines, and we want to know
# when they are done.

# (EDIT) It's probably better to use the 'wait' shell built-in; that's
# precisely what it seems to be for.
while true
do
    sleep 1
    alldead=true
    for pid in $pidlist
    do
        if kill -0 $pid > /dev/null 2>&1
        then
            alldead=false
            echo some processes alive
            break
        fi
    done
    if $alldead
    then
        break
    fi
done

回声全部完成。

它不会完全同时发生,但它应该并行启动远程脚本。

于 2012-12-11T03:33:53.487 回答