Linux Shell 之定時檢測Tomcat運行

相信不少用Tomcat作web容易的開發者都知道,Tomcat運行久了之後,會崩潰掉,而且原有的關閉和啓動腳本並不能使用,由於端口仍然佔用。所以須要作幾件事: html

  1. 關閉Tomcat,檢測端口占用,啓動Tomcat
  2. 檢測Tomcat應用是否崩潰,若是崩潰,按照1的辦法解決
  3. 定時檢測,檢測異常,按照2的辦法解決
知道怎麼作之後,着手進行。

1.關閉Tomcat,檢測端口占用,啓動Tomcat

關閉和啓動Tomcat,在本來的bin目錄下,都對應的startup.sh和shutdown.sh,咱們要作的就是檢測端口占用,強制關閉端口占用的進程。
function check_port(){
        echo "Begin checking..."
        # exist process occupying port 80
        if lsof -i :80 | grep -q ${pattern}
        then
                proc=`lsof -i :80 | grep ${pattern} | awk '{print $1}'` # get process name
                pid=`lsof -i :80 | grep ${pattern} | awk '{print $2}'`  # get process id
                echo "Exist process ${proc} with id ${pid} occupying port 80..."
                kill -9 ${pid}
                echo "Killed it!"
        else
                echo "No process occupying port 80..."
        fi
}
上面這個方法就是作這件事情,而後寫出restartup.sh的腳本。

2.檢測Tomcat應用是否崩潰,若是崩潰,按照1的辦法解決

檢測Tomcat是否崩潰,有人會出,看線程,其實更直觀的應該看應用程序是否正常,所以在web目錄下建一個status.html,內容爲ok既可。
tlog=/Tomcat-Home/bin/tlog
DATE=`date +'%F %T'`

check=`/usr/bin/wget -S --spider --tries=3 --timeout=3 http://ip:port/status.html 2>&1 | grep HTTP/1.1|awk '{print $2}'`

if [ "$check"x = "200"x ];then
        echo "$DATE good state">>$tlog
else    
        echo "$DATE bad state.">>$tlog
        restartup.sh
fi
測試上述腳本,得出statusCheck.sh腳本

3.定時檢測,檢測異常,按照2的辦法解決

在Linux中定時檢測使用crontab。
新建job.txt,寫入
*/5 * * * * /Tomcat-Home/bin/statusCheck.sh
crontab job.txt
使用-l參數查看增長job的狀況
crontab -l
若是須要編輯使用-e參數既可。

遇到的問題:

1.Shell中if語句的空格問題

明確規則:
1. if與[之間要有空格
2. []與判斷條件之間也必須有空格
3. ]與;之間不能有空格

2.shell腳本報錯:"[: =: unary operator expected"

if [ $STATUS == "OK" ]; then     
echo "OK"
fi
若是變量STATUS值爲空,那麼就成了 [ = "OK"] ,顯然 [ 和 "OK" 不相等而且缺乏了 [ 符號,因此報了這樣的錯誤。
方法一:
if [[ $STATUS = "OK" ]]; 
then     
echo "OK"
fi
方法二:
if [ "$STATUS"x == "OK"x ]; then


參考文獻:
相關文章
相關標籤/搜索