shell腳本實現重啟tomcat項目


背景: 

  日常工作中有時會需要手動重啟tomcat項目,每次都是cd  到項目路徑下--->cd   bin--->./startup.sh, 一直都是重復性的 cd  cd cd   很煩人。有次同事說,怎么不把它搞成自動化腳本呢?每次這樣搞,多浪費時間。 so  決定寫個腳本解放雙手。

之前考慮過有python來實現,后來放棄了。目前服務器中的python版本是2.6.6,目前大多數用的版本是python 3.x 。 

需求:

  想用腳本重啟tomcat項目,通過傳參的方式(參數:項目的名稱) 。

  腳本名稱:restartApp.sh

  腳本運行方式:sh restartApp.sh  tomcat-8107

代碼:

#!/bin/bash
set -x
#ps_result=`ps -ef | grep tomcat| grep $1`
#echo "${ps_result}"

echo -e "\n\n\n"
pids=`ps -ef| grep tomcat |grep $1 |grep -v 'grep'|grep -v 'restartApp.sh'|awk '{print $2}'`
count=0
pid_num=0
for pid in ${pids}
do 
	pid_num=${pid}
	echo "pid_num:${pid_num}"
	#count=`expr ${count}+1`
	count=$(($count+1))
	echo  "count: ${count}"
done

if [[ $count -gt 1 ]]
then
	echo  "一個項目有兩個進程 異常"
else
	kill -9 ${pids}
	echo "Kill ${pids}  Success!"
	#重啟
	echo  "重啟中。。。。。。。"
	sh /home/lifesea/$1/bin/startup.sh
fi
echo -e "\n\n\n"

知識點:

  1. #!/bin/bash是指此腳本使用/bin/bash來解釋執行,#!是特殊的表示符,其后面根的是解釋此腳本的shell的路徑。

  2. grep -v 是反向查找的意思,比如 grep -v restartApp 就是查找不含有 restartApp 字段的行
  3. shell 傳遞變量 如下:

    截圖文字來源:https://www.cnblogs.com/bclshuai/p/7409773.html
  4. awk '{print $2}'   打印第二個字段

遇到的問題:

1.反撇號的用處,第一次用到

2.

開始的時候: 沒有加 grep -v 'restartApp.sh'   導致查詢出來的進程有很3個(除了grep),如下圖  

更改后:ps -ef| grep tomcat |grep $1 |grep -v 'grep'|grep -v 'restartApp.sh'|awk '{print $2}'

 

執行以下語句得出如下圖的結果

  $1更改為:grep tomcat-8107

#ps_result=`ps -ef | grep tomcat| grep $1`
#echo "${ps_result}"

 

 

3.在服務器上調試腳本 vim restartApp.sh 腳本   因為不熟悉的緣故,導致效率低。

vim 常用快捷鍵: 

:set number  顯示行號

:set  -x    詳細的日志輸出

h      向前

j       向下

k      向上

l      向右

4.感謝znn  從昨天下午一直到今天,一直協助我定位問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM