自動執行shell指令碼

2022-09-09 08:09:19 字數 3696 閱讀 6267

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/bash

project_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...