天天看點

Linux 環境定時重新開機 tomcat

親手搭建的部落格系統(http://www.mhtclub.com/)經常會當機,一直想着定時檢測tomcat服務挂掉之後進行重新開機操作。昨天終于有時間,就把這個事情做了一下,最終可以正常工作。本篇就記錄一下我解決 linux 環境定時重新開機 tomcat 這件事情。

其實我是做 Java 開發的,讓我直接上來寫一個 bash 腳本,我覺得不太可能,一個原因是沒那麼多時間,另外一個原因對 bash 也不太了解,隻懂一些皮毛。是以我的宗旨是“拿來主義”,快速的解決我的問題。功能完成後有時間可對内容再做深入學習。

解決步驟

1.搜尋網上的資源

一般的不懂得東西,隻要願意動手,你都可以找到解決方案的。谷歌搜尋“linux 環境定時重新開機 tomcat ”的解決方案。

Linux 環境定時重新開機 tomcat

2.修改腳本

大概閱讀了原來腳本的内容,需要有以下幾個地方:

  • 擷取 tomcat 程序 ID(注意:預設使用 tomcat 就可以)
  • tomcat 啟動程式路徑
  • 監控的頁面位址
  • 日志輸出路徑(注意:提前建立好日志檔案)

修改 monitor.sh 後的内容如下:

#!/bin/sh
# func:自動監控tomcat腳本并且執行重新開機操作
# author:EagleHao
# date:2018-04-08
# DEFINE
 
# 擷取tomcat程序ID(其中[grep -w 'tomcat']代碼中的tomcat需要替換為你的tomcat檔案夾名)
TomcatID=$(ps -ef |grep tomcat |grep -w 'apache-tomcat'|grep -v 'grep'|awk '{print $2}')
 
# tomcat啟動程式(這裡注意tomcat實際安裝的路徑)
StartTomcat=/opt/mihoutao/tomcat/apache-tomcat-8.5.28/bin/startup.sh
TomcatCache=/opt/mihoutao/tomcat/apache-tomcat-8.5.28/work
 
#定義要監控的頁面位址
WebUrl=http://www.mhtclub.com/
 
#日志輸出
GetPageInfo=/tmp/TomcatMonitor.Info
TomcatMonitorLog=/tmp/TomcatMonitor.log
 
Monitor()
{
echo "[info]開始監控tomcat...[$(date +'%F %H:%M:%S')]"
if [ $TomcatID ];then #這裡判斷Tomcat程序是否存在
echo "[info]目前tomcat程序ID為:$TomcatID,繼續檢測頁面..."
# 檢測是否啟動成功(成功的話頁面會傳回狀态"200")
TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
if [ $TomcatServiceCode -eq 200 ];then
echo "[info]頁面傳回碼為$TomcatServiceCode,tomcat啟動成功,測試頁面正常"
else
echo "[error]tomcat頁面出錯,請注意...狀态碼為$TomcatServiceCode,錯誤日志已輸出到$GetPageInfo"
echo "[error]頁面通路出錯,開始重新開機tomcat"
kill -9 $TomcatID # 殺掉原tomcat程序
sleep 3
rm -rf $TomcatCache # 清理tomcat緩存
$StartTomcat
fi
else 
echo "[error]tomcat程序不存在!tomcat開始自動重新開機..."
echo "[info]$StartTomcat,請稍候..."
rm -rf $TomcatCache
$StartTomcat
fi
echo "--------------------------"
}
Monitor>>$TomcatMonitorLog
           

3.添加定時任務

linux 添加定時任務,指令:crontab -e

添加内容:*/20 * * * * /opt/mihoutao/tomcat/monitor.sh

說明:20分鐘檢測一次,如果 tomcat 挂掉了,就會重新開機。

Linux 環境定時重新開機 tomcat

FAQ

1.将 windows 寫好的 bash 檔案上傳到 linux 環境,可能會出現格式問題。一般是因為 Linux 無法識别出 windows 的 DOS 格式,此時隻需将檔案格式轉換成 unix 的即可。

提示錯誤:bad interpreter: No such file or directory

解決方法:

  1. 編輯出錯檔案 vi filename
  2. 修改格式 :set ff=unix
  3. 儲存退出 :wq!

2.重新開機時提示 Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

解決方法:在 setclasspath.bat 的開頭聲明環境變量,打開 tomcat 的 bin 目錄下面的 setclasspath.sh ,添加紅色部分,路徑修改為自己機器 jdk 和 jre 路徑即可。

添加下面兩行代碼:

export  JAVA_HOME=/opt/mihoutao/jdk1.8.0_161
export  JRE_HOME=/opt/mihoutao/jdk1.8.0_161/jre
           

3.設定定時任務

linux 定時任務文法:

分 小時 日 月 星期 指令

0-59 0-23 1-31 1-12 0-6 command (取值範圍,0表示周日一般一行對應一個任務)

記住幾個特殊符号的含義:

“*”代表取值範圍内的數字, ​ “/”代表”每”, ​ “-”代表從某個數字到某個數字, ​ “,”分開幾個離散的數字

例如:30 5 8 6 * ls 指定每年的 6 月 8 日 5:30 執行ls指令

參考資料:

Linux 環境定時重新開機 Tomcat :https://blog.csdn.net/wjsshhx/article/details/83146060

Windows 檔案複制到 Linux 亂碼:https://blog.csdn.net/qq598535550/article/details/72867885

Tomcat 自動重新開機,環境變量配置:https://blog.csdn.net/john_hongming/article/details/16941039

Linux 定時任務參考:https://blog.csdn.net/xiyuan1999/article/details/8160998