背景:
日常工作中有時會需要手動重啟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"
知識點:
-
#!/bin/bash是指此腳本使用/bin/bash來解釋執行,#!是特殊的表示符,其后面根的是解釋此腳本的shell的路徑。
- grep -v 是反向查找的意思,比如 grep -v restartApp 就是查找不含有 restartApp 字段的行
- shell 傳遞變量 如下:
截圖文字來源:https://www.cnblogs.com/bclshuai/p/7409773.html -
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 從昨天下午一直到今天,一直協助我定位問題。
