多臺伺服器檔案分發指令碼和命令執行指令碼
阿新 • • 發佈:2018-12-24
背景:基於hadoop的分散式部署 (具體請看文章),為了方便檔案的分發與命令的執行,顧編制此指令碼
伺服器配置四臺:(h101 192.168.44.101)(h102 192.168.44.102)(h103 192.168.44.103)(h104 192.168.44.104)
備註:h101可以ssh免密碼登入進入 h102 h103 h104 .
一、命令分發
1、本機使用hadoop使用者操作(建議初學者使用root(去掉所有命令中的sudo),完成後,再新建使用者進行sudo配置後,再操作)
建立資料夾:shell
新建檔案:xcall.sh (命令分發執行)
修改檔案許可權
2、xcall.sh 內的指令碼編寫:
#!/bin/bash #echo hello world #獲取輸入引數 [email protected] echo ${params} #通過hostname來執行ssh命令 提前進行hostname和ip的繫結對應 for (( i = 101 ; i <= 104 ; i = $i + 1 )) ; do echo ============ h$i $params =============== ssh h$i $params done
測試:(基於hadoop的分散式配置) (執行指令碼加(./) 代表當前目錄下)
當無需輸入密碼,成功,代表檔案命令分發成功。
但為了可以在任何目錄下執行次操作:
輸入命令:$>echo $PATH
檢視指令碼可以自動識別的路徑:
本地將指令碼放置到:/usr/local/bin 目錄下
進入任何目錄測試: (備註:輸入xc 後按tab鍵可以自動補全 說明配置成功)
二、檔案分發
1、建立xsync.sh 檔案分發指令碼
2、修改xsync.sh
3、編寫檔案內容
#!/bin/bash
echo '檔案分發中'
#檢視當前檔案是否目錄
echo $#
if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi
p=$1
#echo p=$p
#注意此處執行linux命令 並非英文或中文的單引號 而是 tab鍵上單引號
dir=`dirname $p`
#echo dir=$dir
filename=`basename $p`
#echo filename=$filename
cd $dir
fullpath=`pwd -P .`
#echo fullpath=$fullpath
#獲取當前伺服器當前使用者
user=`whoami`
for (( i = 102 ; i <= 104 ; i = $i + 1 )) ; do
echo =========== h$i $1 ======================
rsync -lr $p ${user}@h$i:$fullpath
done
4、測試、
備註:代表成功。
同時為了在任意目錄均可執行,進行上述描述過的操作即可