Linux學習總結(六十五)tomcat啟動腳本
阿新 • • 發佈:2018-06-30
kcon 函數 script rgs 數據表 強制 $0 調用函數 AS 腳本的學習一直不得章法,之前都是囫圇吞棗式的學習,現在決定好好梳理下思路,看看究竟哪裏是弱項。之前詢問一個架構師大神,問shell腳本應該怎麽學習,人家回答了句,shell很簡單啊。現在想想對於一個編程經驗豐富的人來說shell確實簡單,從我在學校中對c和c++的認識,足以感知到。人的思維一定是先由整體再到過程。對於一個程序的開發來說,一定是先從整體邏輯框架再到具體細節處理。接下來我從一個腳本中去尋找我的知識的短板。
寫個shell腳本,實現上述功能。備註:徹底殺死一個進程的命令是kill -9 pid
3 啟動後要檢查是否啟動成功,可以通過是否存在java進程來判斷。
題目要求:
在生產環境中,經常遇到tomcat無法徹底關閉,也就是說用tomcat自帶的shutdown.sh腳本無法將java進程完全關掉。所以需要借助shell腳本,將進程殺死,然後再啟動。
題目分析:
1 題目要求腳本完成兩個任務,關閉java進程和成功啟動tomcat服務。所以它應該分為兩部分:關閉和啟動。就目前題目要求來說,我們只需要寫stop和start兩個函數,然後分別調用函數即可。如果我們要將其做成一個/etc/init.d/ 下面的啟動腳本。那麽只需要再該腳本基礎上加上case 結構,可以執行stop和start選項。如果還需要一個重啟功能,那麽再定義一個restart函數,restsat功能就是先stop再start。在case多加一個條件就可以。
2 過程中需要註意的細節。 kill -9 殺進程比較危險有可能會導致一些數據丟失,盡量少用。
腳本的整體框架就是:
#!/bin/bash
tomcatdir=/usr/local/tomcat
stop()
{
}
start()
{
}
stop
start
具體代碼為
#!/bin/bash tomcatdir=/usr/local/tomcat //指定tomcat的安裝路徑 stop() { echo -n "stopping tomcat." killall java i=0 while [ $i -lt 10 ] do if pgrep -l java &> dev/null //pgrep -l 顯示進程名及pid,有數據表示非空,為真。 then killall java sleep 1 echo -n "." //每嘗試一次輸出一個點,給出狀態提示。 i=$[$i+1] else echo -e "\033[32m[0k]\033[0m" //輸出綠色的帶中括號的ok字符 break fi done //程序一進來先用killall嘗試殺一遍進程,如果成功直接顯示綠色字體的[ok]退出,如果失敗,則再嘗試10次。 if pgrep -l java &> /dev/null then pgrep java |xargs kill -9 &> /dev/null // xargs 表示對列出的每個進程都殺一次 sleep 1 pgrep java |xargs kill -9 &> /dev/null fi if pgrep java &> /dev/null then echo "java 進程殺不掉,請檢查" exit fi // 再次檢查進程,如果還存在,用kill -9 強制殺,嘗試兩次。殺不死,輸出提示信息。 } start() { cd $tomcatdir echo -n "starting tomcat." ./bin/startup.sh 2>/tmp/start_tomcat.log i=0 while [ $i -lt 3 ] do if ! pgrep java &> /dev/null then ./bin/startup.sh 2>/tmp/start_tomcat.log echo -n "." i=$[$i+1] else echo -e "\033[32m[0k]\033[0m" break fi done if ! pgrep java &> /dev/null then cat /tmp/start_tomcat.log echo "tomcat 無法啟動,請檢查。" fi } // 程序一進來先嘗試啟動一次,如果成功直接輸出ok,如果還沒找掉進程,則嘗試三次。還是失敗的話,給出提示退出。 if ! rpm -q psmisc &> /dev/null then echo "安裝psmic包。" yum install -y psmisc fi // 在調用函數之前,檢查帶有killall命令的包是否安裝,沒有使用yum安裝。 stop start
封裝為可以開機啟動的腳本
vim /etc/init.d/tomcatd
#!/bin/bash
#chkconfig: 2345 80 20
#############################################################################
#this scripts is about tomcat start or stop
#############################################################################
function usage(){
echo "$0 {start|stop|restart}"
}
if [ $# -ne 1 ];then
usage
exit 1
fi
tomcatdir=/usr/local/tomcat
start()
{
cd $tomcatdir
echo -n "starting tomcat."
./bin/startup.sh 2>/tmp/start_tomcat.log
i=0
while [ $i -lt 3 ]
do
if ! pgrep java &> /dev/null
then
./bin/startup.sh 2>/tmp/start_tomcat.log
echo -n "."
i=$[$i+1]
else
echo -e "\033[32m[0k]\033[0m"
break
fi
done
if ! pgrep java &> /dev/null
then
cat /tmp/start_tomcat.log
echo "tomcat 無法啟動,請檢查。"
fi
}
stop()
{
echo -n "stopping tomcat."
killall java
i=0
while [ $i -lt 10 ]
do
if pgrep -l java &> dev/null
then
killall java
sleep 1
echo -n "."
i=$[$i+1]
else
echo -e "\033[32m[0k]\033[0m"
break
fi
done
if pgrep -l java &> /dev/null
then
pgrep java |xargs kill -9 &> /dev/null
sleep 1
pgrep java |xargs kill -9 &> /dev/null
fi
if pgrep java &> /dev/null
then
echo "java 進程殺不掉,請檢查"
exit
fi
}
restart()
{
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restat
;;
esac
Linux學習總結(六十五)tomcat啟動腳本