2011-11-24 67 views

回答

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 

有一點需要注意,因爲所有的子進程同時運行,並使用相同的控制檯,您可以在屏幕上看到一些交錯輸出。

+0

如果您使用斐波納契樹而不是星形拓撲,則可以減少主要主機上的負載,並且還可以加快完成廣播傳播的時間。儘管如此,+1爲'&'主意:) – bitmask

+0

@bitmask。對於大約20臺服務器(與OP請求一樣),我沒有看到中央服務器的負載問題。 –

0
omnissh() { for s in $(cat /server/list) ; do ssh $s "[email protected]" ; done } 

omnissh /etc/init.d/service start 
2

你將不得不使用ssh,如果設置正確的公共密鑰到你的服務器,你就不必輸入密碼:

for host in hosts 
do 
    ssh [email protected]$host "./app arg1 arg2" 
done 

否則,你可以使用Fabric幫助你以編程方式做到這一點。

相關問題