我已经设置了几个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脚本中来自动执行此过程。
以及奖励积分...如果有办法将信息发送回机器发送命令,表明它已经完成了运行非常棒的脚本。
答案 0 :(得分: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
回应所有完成。
它不会完全同时发生,但它应该并行启动远程脚本。