scpfile.sh
#scp複製指定檔案到遠端伺服器指定目錄,在遠端主機上執行命令。
#!/bin/bash#ipfile.txt是jar或war包與目標主機ip對應關係
#tmp.txt是臨時存放jar或war包記錄和日誌
#scpfile.sh呼叫目標主機上的renamerun.sh,執行備份和執行操作
#scpfile.sh放置在cms的上傳包所在資料夾,且cms與目標伺服器已經實現免密登陸
#源檔案目錄
dir1=/opt/tsingyun/basic_pkg
cd $dir1
#jar需要上傳的檔案目錄
#zip前端上傳檔案目錄
#jar檔案行數
row=`ls -l *.jar | awk '' | wc -l`
#如果jar存在,讀取當前資料夾下*.jar檔名稱
if [ "$row" -gt "0" ] ; then
ls -l *.jar | awk '' > tmp.txt
fi# 單個檔案進行複製操作
for ((i =1;i <= $row;i=i+1))
do #行讀取tmp.txt檔案
onerow=`sed -n "$i"p < tmp.txt`
#左擷取
leftonerow=$
#右擷取
rightonerow=$
#檢索出檔名對應在伺服器的ip
ip=`more ipfile.txt | grep $rightonerow | sed 's/-.*$//g'`
echo `date`+$rightonerow+$ip+"jar包與所在伺服器ip" >> tmplog.txt
#遠端複製scp至目標伺服器檔案,再執行遠端登陸,執行renamerun.sh
scp $onerow "root@$:$tsingyun-$" && ssh root@$ "cd $tsingyun-$; ./renamerun.sh"
echo `date`+$ip+"登陸遠端主機,執行主機上的shell指令碼" >> tmplog.txt
done
#war檔案行數
row=`ls -l *.war | awk '' | wc -l`
#如果.war存,在讀取當前資料夾下*.war檔名稱
if [ "$row" -gt "0" ] ; then
ls -l *.war | awk '' > tmp.txt
fi# 單個檔案進行複製操作
for ((i =1;i <= $row;i=i+1))
do #行讀取tmp.txt檔案
onerow=`sed -n "$i"p < tmp.txt`
#左擷取
leftonerow=$
#右擷取
rightonerow=$
#檢索出檔名對應在伺服器的ip
ip=`more ipfile.txt | grep $rightonerow | sed 's/-.*$//g'`
echo `date`+$rightonerow+$ip+"war包與所在伺服器ip" >> tmplog.txt
#遠端複製scp至目標伺服器檔案,再執行登陸遠端主機,執行renamerun.sh
scp $onerow "root@$:$tsingyun-$" && ssh root@$ "cd $tsingyun-$; ./renamerun.sh"
echo `date`+$ip+"登陸遠端主機,執行主機上的shell指令碼" >> tmplog.txt
done
#zip檔案行數
row=`ls -l *.zip | awk '' | wc -l`
#zip檔案存在,執行複製操作
if [ "$row" -gt "0" ] ; then
scp *.zip $dir3
echo `date`+$row+"個zip檔案進行copy" >> tmplog.txt
#執行遠端主機上的unzipbak.sh指令碼
fiexit 0
renamerun.sh
#備份原檔案,重新命名新檔案,執行startup.sh
#!/bin/bash#renamerun.sh需要放在jar|war包的當前目錄下;
#renamerun.sh呼叫startup.sh
#renamerun.sh被cms上的scpfile.sh呼叫
#判斷當前目錄下是jar還是war,並按時間公升序排列
ls -lrt *.jar > tmp.txt
#判斷包型別
if [ $? == 0 ] ; then
var=jar
else
ls -lrt *.war > tmp.txt
var=war
fi#統計當前目錄下的*.jar或.war行數
row=`more tmp.txt | wc -l`
#如果*.jar或.war行數大於等於2,執行rename
if [ "$row" -lt "2" ] ; then
#當前目錄下只用乙個*.jara或.war包
echo `date`+當前目錄下只用乙個"+$var+"包,不進行rename和執行》 tmp.txt
else
#檢索出需要重新命名的.jar或.war檔名
renamefile=`sed -n 1p < tmp.txt | awk ''`
#jar或war重新命名
mv $renamefile $renamefile.`date +"%y%m%d"`
#右擷取,執行引數tsingyun-*
rightrenamefile=$
#新jar或war處理,列印新包名
newjar=`ls -l *.$var | awk ''`
#擷取左邊字串,確定是否需要重新命名
leftnewjar=$
if [ "$" == "tsingyun" ] || [ "$" == "tsingyun" ] ; then
echo `date`+$var+"新包不需要重新命名" >> tmp.txt
else
#新jar或war包重新命名
mv $newjar $rightrenamefile-$
echo `date`+`$var`+"新包重新命名成功" >> tmp.txt
fi#執行新的jar或war包
./startup.sh $rightrenamefile
echo `date`+$var+"執行新包成功" >> tmp.txt
fiexit 0
startup.sh
#! /bin/bashproject_name=$1
env=$2
source /etc/profile
jar_path=`find $base_dir -name '*.jar' |grep -v 'sources'|grep $/$`
jps -l| grep -v jps |grep $/$ | awk -f " " ''| xargs kill -9
nohup j**a -jar -xms8g -xmx8g -duser.timezone=gmt+8 -dapollo.meta= $jar_path >> $base_dir/tsingyun.log &
shell 執行shell指令碼
bin bash echo hello world 是乙個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 shell。echo 命令用於向視窗輸出文字。1 作為可執行程式 chmod x test.sh 使指令碼具有執行許可權 test.sh 執行指令碼注意,一定要寫成 test...
利用shell指令碼自動執行python程式
shell 是乙個用 c 語言編寫的程式,它是使用者使用 linux 的橋梁。shell 既是一種命令語言,又是一種程式語言.shell 是指一種應用程式,這個應用程式提供了乙個介面,使用者通過這個介面訪問作業系統核心的服務.shell 指令碼 shell script 是一種為 shell 編寫的...
Shell指令碼執行
shell是乙個命令列直譯器,它為使用者提供了乙個向linux核心傳送請求以便執行程式的介面系統級程式,使用者可以用shell來啟動 掛起 停止甚至是編寫一些程式。shell指令碼 shell script 是一種shell編寫的指令碼程式。linux的shell種類很多,常見的有 bourne a...