1、指令碼簡介
tomcat看門狗,在tomcat程式異常退出時會自動拉起tomcat程式並記錄tomcat執行的日誌。
1 函式說明: 2 log_info:列印日誌的函式,入參為需要在日誌中列印的msg 3 start_tom:啟動tomcat的函式 4 check_tom_run:每隔30s檢測tomcat程式是否存在 5 log_backup:備份tomcat監控日誌
- check_tom_run每隔30s檢測tomcat程式是否存在,log_info用於記錄tomcat執行日誌和操作日誌。
- tomcat程式不存在時,執行start_tom去啟動。
- 當日志檔案大小大於指定大小時,則備份監控日誌。
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
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