shell實戰之tomcat看門狗

秦無殤發表於2019-04-04

1、指令碼簡介

  tomcat看門狗,在tomcat程式異常退出時會自動拉起tomcat程式並記錄tomcat執行的日誌。

1 函式說明:
2         log_info:列印日誌的函式,入參為需要在日誌中列印的msg
3         start_tom:啟動tomcat的函式
4         check_tom_run:每隔30s檢測tomcat程式是否存在
5         log_backup:備份tomcat監控日誌
  1. check_tom_run每隔30s檢測tomcat程式是否存在,log_info用於記錄tomcat執行日誌和操作日誌。
  2. tomcat程式不存在時,執行start_tom去啟動。
  3. 當日志檔案大小大於指定大小時,則備份監控日誌。

2、前提條件

  a、需要一臺Linux主機

  b、主機上已部署tomcat

  訪問地址:http://localhost:8080/ 如果出現以下介面,則說明tomcat已成功啟動。

  

 

3、指令碼程式碼

  指令碼程式碼如下:

  1 #!/bin/bash
  2 #以下為多行註釋
  3 : << !
  4 作用:tomcat watch dog,用於在tomcat程式退出後,自動拉起tomcat
  5 函式說明:
  6         log_info:列印日誌的函式,入參為需要在日誌中列印的msg
  7         start_tom:啟動tomcat的函式
  8         check_tom_run:每隔10s檢測tomcat程式是否存在
  9         log_backup:備份tomcat監控日誌
 10 !
 11 
 12 curr_path=`pwd`
 13 #tomcat的安裝路徑
 14 tom_path=/home/stephen/InstallPath/apache-tomcat-8.5.39
 15 
 16 
 17 #定義列印日誌的函式
 18 function log_info(){
 19 local curr_time=`date "+%Y-%m-%d %H:%M:%S"`
 20 log_file=${curr_path}/tom_running.log
 21 #判斷日誌檔案是否存在
 22 if [ -e ${log_file} ]
 23    then
 24    #檢測檔案是否可寫
 25    if [ -w ${log_file} ]
 26    then
 27        #若檔案無寫許可權則使用chmod命令賦予許可權
 28        chmod 770 ${log_file}
 29    fi
 30 else
 31    #若日誌檔案不存在則建立
 32    touch ${log_file}
 33 fi
 34 #寫日誌
 35 local info=$1
 36 echo "${curr_time}  `whoami` [Info] ${info}">>${log_file}
 37 }
 38 
 39 function start_tom(){
 40         log_info "Begin to start tomcat."
 41         cd ${tom_path}/bin
 42         log_info "cd ${tom_path}/bin"
 43         sh  startup.sh
 44         log_info "sh  startup.sh"
 45         #使用ps命令+awk獲取tomcat的PID
 46         tom_pid=`ps -aux|grep apache-tomcat|grep -v grep|awk '{print $2}'`
 47         if  [ -z ${tom_pid} ]
 48             then
 49             sh startup.sh
 50         fi
 51         log_info "End to start tomcat."
 52 }
 53 
 54 #如果tomcat_pid為零,則說明tomcat程式不存在,需要去重啟
 55 function check_tom_run()
 56 {
 57 tom_pid=`ps -aux|grep apache-tomcat|grep -v grep|awk '{print $2}'`
 58 echo ${tom_pid}
 59 if [ -z ${tom_pid} ]
 60 then
 61    echo "tomcat process is not running."
 62    #呼叫函式start_tom
 63    start_tom
 64    log_info "tomcat process is not running."
 65    #列印日誌
 66 else
 67    echo "tomcat process is running"
 68    #列印日誌
 69    log_info  "tomcat process is running"
 70 fi
 71 }
 72 #備份日誌
 73 function log_backup(){
 74 cd ${curr_path}
 75 log_name=tom_running.log
 76 #獲取當前日誌的大小
 77 log_size=`ls -all|grep -v ${log_name}.|grep  ${log_name}|awk '{print $5}'`
 78 echo ${log_size}
 79 #當日志大於150MB時進行備份並清空舊的日誌
 80 expect_size=`expr 150 \* 1024 \* 1024`
 81 echo ${expect_size}
 82 if [ ${log_size} -gt ${expect_size} ]
 83    then
 84    log_info "Begin to backup log."
 85    local ct=`date "+%Y-%m-%d-%H-%M-%S"`
 86    cp ${log_name} ${log_name}.${ct}
 87    log_info "cp ${log_name} ${log_name}.${ct}"
 88    #使用gzip命令壓縮日誌
 89    gzip -q  ${log_name}.${ct}  ${log_name}.${ct}.gz
 90    #清空舊日誌
 91    cat  /dev/null > ${log_name}
 92    log_info "cat  /dev/null > ${log_name}"
 93 fi
 94 }
 95 
 96 #隔30s迴圈執行check_tom_1run
 97 while [ 1 ]
 98 do
 99   check_tom_run
100   log_backup
101   #休眠30s
102   sleep 30
103 done
View Code

 

4、執行結果

  4.1、執行指令碼命令如下

1 chmod +x  /tomcatWatchDog.sh
#&表示指令碼後臺執行
2 ./tomcatWatchDog.sh &

  4.2、新開啟一個視窗,殺掉tomcat程式

#獲取tomcat的PID
ps -ef|grep  tomcat
#kill程式,PID為tomcat程式ID
kill -9 PID

  4.3、檢視tom_running檔案,從日誌來看tomcat程式已自動拉起。

 1 2019-04-04 15:23:19  stephen [Info] tomcat process is running
 2 2019-04-04 15:23:20  stephen [Info] tomcat process is running
 3 2019-04-04 15:23:34  stephen [Info] tomcat process is running
 4 2019-04-04 15:24:04  stephen [Info] tomcat process is running
 5 2019-04-04 15:24:34  stephen [Info] Begin to start tomcat.
 6 2019-04-04 15:24:34  stephen [Info] cd /home/stephen/InstallPath/apache-tomcat-8.5.39/bin
 7 2019-04-04 15:24:34  stephen [Info] sh  startup.sh
 8 2019-04-04 15:24:34  stephen [Info] End to start tomcat.
 9 2019-04-04 15:24:34  stephen [Info] tomcat process is not running.
10 2019-04-04 15:25:04  stephen [Info] tomcat process is running
11 2019-04-04 15:25:34  stephen [Info] tomcat process is running

  4.4、當日志檔案大小大於指定大小時,會備份日誌檔案。

1 -rwxr-xr-x  1 stephen stephen   2679 4月   4 14:57 tomcatWatchDog.sh*
2 -rwxrwx---  1 stephen stephen 573893 4月   4 15:28 tom_running.log*
3 -rwxr-x---  1 stephen stephen   7597 4月   4 12:43 tom_running.log.2019-04-04-12-43-53.g

 

相關文章