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

當手上有 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 的用法很簡單, 只要以下步驟即可使用:

  1. 把此 Script 抓下來, 存成 push.sh
  2. 修改此 Script 的粗體字的地方
  3. chmod +x push.sh
  4. ./push.sh

要修改值(粗體)的解說:

  • A, MAX: 從 1 ~ 12 (如上範例會變成 w1, w2 ....w12 )
  • PREFIX: 機器名字前面要叫什麼字, 加了後會類同( w1, w2 ....)
  • SOURCE: 現在機器下的檔案在哪邊
  • REMOTEDIR: 打算要將此檔放到遠端機器哪邊
  • HOST的 hostname: 遠端主機的名字

注意:

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

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈遠端執行命令、多台機器管理(Push.sh)〉中有 2 則留言

Tsung 發表迴響取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料