Tuesday, January 4, 2011

遠端執行命令、多台機器管理(Push.sh)

遠端執行命令、多台機器管理(Push.sh)
from Tsung's Blog by jon
當手上有 1 台機器, 管理的方法是 ssh 到那台機器做事.

當手上有 5 台機器, 管理的方法就會想要遠端執行, 就會使用

用法: ssh 主機名稱 "要執行指令"
ssh hostname 'sudo cp http.conf /usr/local/apache/conf/'
ssh hostname "ls"
ssh hostnmae "sudo /usr/local/apache/bin/apachectl restart"
當手上有 30 台機器的時後, 管理的方法就會如下:


用法: for i in i的值; do 目前機器要下的命令 '遠端機器要下的命令'; done;
for i in 1 2 3; do scp xxx.conf w$i.hostname:; done;
for i in 1 2 3; do /usr/bin/ssh w$i.hostname 'sudo mv xxx.conf /usr/loca/conf'
for i in 1 2 3; do /usr/bin/ssh w$i.hostname 'sudo ls /'; done;
1 2 3 ... 自己寫要幾台都行, 可以改成自己其它取的值
注意: 目前機器要下的命令, 不要用 " 或 ' 包起來, 只有要給 遠端機器 的指令才要用 " 或 ' 包起來.


當我覺得這樣子已經很懶的時後, 總會有個 強者我同事 說~ 這樣子還不夠, 他已經寫成一隻 Script, 專門做前端上百台 Push 的動作. 有興趣想更加了解此強者, 可以參觀 他的blog: George Lee's blog

以下來看一下此 script, push.sh:

#!/bin/sh#for A in 8 9 10 11 12; doA=1;MAX=12;PREFIX=w;SOURCE="/xxx/http.conf";REMOTEDIR="/usr/local/apache/conf"while [ $A -le $MAX ]; doHOST="$PREFIX$A.hostname";echo "$HOST :";rsync -arvz --rsh=ssh $SOURCE $HOST:$REMOTEDIR/.#sudo rsync -arvz --rsh=ssh $SOURCE $HOST:$REMOTEDIR/.#scp parse_search.php $HOST:.#rsync -arvz --rsh=ssh xxx.so $HOST:.#rsync -arvz --rsh=ssh xxx.conf $HOST:$REMOTEDIR/.A=`expr $A + 1`;done;雖然以上我都有做過一些馬賽克, 但是有些歷史遺蹟還是要把他留下來, ex: for A in 8 9 10 11 12; do, 看此行就知道已經經歷過上面的寫到 "管理 30 台機器" 的風風雨雨, 然後才轉變到現在, 寫一支超方便的 Script 來用, 不愧是長輩 Orz....

此 Script 的用法很簡單, 只要以下步驟即可使用:

把此 Script 抓下來, 存成 push.sh
修改此 Script 的粗體字的地方
chmod +x push.sh
./push.sh
要修改值(粗體)的解說:
A, MAX: 從 1 ~ 12 (如上範例會變成 w1, w2 ....w12 )
PREFIX: 機器名字前面要叫什麼字, 加了後會類同( w1, w2 ....)
SOURCE: 現在機器下的檔案在哪邊
REMOTEDIR: 打算要將此檔放到遠端機器哪邊
HOST的 hostname: 遠端主機的名字
注意:

此 Script 只限使用在有機器名字是連續數字的狀況 PS: A=`expr $A + 1`; 此行會將值一直加 1
此 Script 有很多活用的範例, 都 # 註解掉, 但可以簡單看一下程式, 會是相當方便的工具
若那 機器名稱(數字)列表 中, 有機器不存在或死掉, 不用擔心, 程式還是會繼續跑下去, 只是會有錯誤訊息叫幾聲罷了~

--------------------------------------------------------------------------------------------------------------------------
這樣實在太苦~ [回覆]

試試 omnitty。

OmNiTTY - 同步作業的好工具

No comments: