當手上有 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; do
A=1;
MAX=12;
PREFIX=w;
SOURCE="/xxx/http.conf";
REMOTEDIR="/usr/local/apache/conf"
while [ $A -le $MAX ]; do
HOST="$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。
感謝提供此方法, irc 果然是好東西... Orz..