我正在尝试在多个(~20个)Unix服务器上运行应用程序。我想登录一个并使用脚本启动它们,而不是单独通过SSH进入每一个。
应用程序不需要任何直接的用户交互,所以我基本上只需要在每台机器上运行'./app arg1 arg2'。
答案 0 :(得分:3)
直接SSH的一个改进是在后台启动SSH会话,然后wait
完成所有这些。这样您就可以同时在远程服务器上执行命令。
我们在生产脚本中使用这种技术。
function start_server ( )
{
ssh $1 '/path/to/start_service_script'
}
echo "Starting servers"
for serv_name in $( cat /path/to/server-list )
do
# I usually declare a function, because if SSH command
# gets more elaborate ( especially if it has ampersands
# as part of the command, the shell has trouble parsing
# the background push (& at the end of the command)
#
# In this particular case it would be no trouble to
# inline ssh here
start_server ${serv_name} &
done
echo
# Very important to wait till all the spawned processes finish
wait
有一点需要注意,因为所有衍生进程同时运行并使用相同的控制台,您可能会在屏幕上看到一些交错输出。
答案 1 :(得分:2)
您必须使用ssh,如果在服务器上设置了正确的公钥,则无需输入密码:
for host in hosts
do
ssh user@$host "./app arg1 arg2"
done
否则,您可以使用Fabric来帮助您以编程方式执行此操作。
答案 2 :(得分:0)
omnissh() { for s in $(cat /server/list) ; do ssh $s "$@" ; done }
omnissh /etc/init.d/service start