因實際開發需要,在叢集上多個機器上執行相同的命令,比如執行一個指定的指令碼、刪除相同目錄下的檔案(這個得謹慎~~)等,組內的成員開發了一個 allscp (可以批量執行scp 命令來同步線上代碼)非常好用,我自己也寫了一個,主要是使用ssh 登陸到一個伺服器上,然後執行一個指定的命令。
先貼Shell 代碼:
#!/bin/bashif [ "$#" -ne 2 ] ; then echo "USAGE: $0 -f server_list_file cmd" exit -1fifile_name=$1cmd_str=$2cwd=$(pwd)cd $cwdserverlist_file="$cwd/$file_name"if [ ! -e $serverlist_file ] ; then echo 'server.list not exist'; exit 0fiwhile read linedo #echo $line if [ -n "$line" ] ; then echo "DOING--->>>>>" $line "<<<<<<<" ssh $line $cmd_str < /dev/null > /dev/null if [ $? -eq 0 ] ; then echo "$cmd_str done!" else echo "error: " $? fi fidone < $serverlist_file
代碼很簡單,不解釋。
使用方法:
1. 建立一個檔案host_file_list,檔案中為伺服器的地址,每個一行;
2. 儲存上面shell 指令碼, 如儲存為 allcmd.sh,注意使用 chmod +x allcmd.sh 使之成為可執行指令碼;
3. 運行 allcmd.sh host_file_list md 即可, host_file_list 是第1步的檔案名稱(記得和 allcmd.sh 放在相同目錄下), cmd 就是要執行的命令,用單引號包起來,例如:刪除/home/nuaazdh/下面的一個 tmp.txt 檔案: allcmd.sh host_file_list 'rm /home/nuaazdh/tmp.txt'
4. done。