首頁 > 軟體

Linux系統上實現定時重啟Tomcat服務指令碼介紹

2021-11-25 19:01:30

因為使用阿里雲部署伺服器應用時,Tomcat服務經常由於記憶體不足出現OutOfMemoryError異常的情況。經常過幾天就需要重啟一次伺服器,更要命的是不知道什麼時候會由於記憶體不足導致無法存取,如果重啟不及時嚴重影響系統體驗。

為了解決上述問題,一方面是對tomcat設定做一些優化,網上有很多文章講解如何優化Tomcat記憶體設定;另一方面就是寫一個shell指令碼,每天定時重啟Tomcat服務。這裡主要記錄一下如何寫shell指令碼並且設定定時任務。本人使用的環境是阿里雲Ubuntu伺服器,以下設定在阿里雲的Ubuntu伺服器上能正常執行。

一、建立Shell指令碼

新建一個tomcat.sh檔案,輸入以下內容:

#!/bin/bash
. /etc/profile
tomcatPath="/usr/local/tomcat"
binPath="$tomcatPath/bin"
echo "[info][$(date +'%F %H:%M:%S')]正在監控tomcat,路徑:$tomcatPath"
pid=`ps -ef | grep tomcat | grep -w $tomcatPath | grep -v 'grep' | awk '{print $2}'`
if [ -n "$pid" ]; then
echo "[info][$(date +'%F %H:%M:%S')]tomcat程序為:$pid"
echo "[info][$(date +'%F %H:%M:%S')]tomcat已經啟動,準備使用shutdown命令關閉..."
$binPath"/shutdown.sh"
sleep 2
pid=`ps -ef | grep tomcat | grep -w $tomcatPath | grep -v 'grep' | awk '{print $2}'`
if [ -n "$pid" ]; then
echo "[info][$(date +'%F %H:%M:%S')]使用shutdown命令關閉失敗,準備kill程序..."
kill -9 $pid
echo "[info][$(date +'%F %H:%M:%S')]kill程序完畢!"
sleep 1
else
echo "[info][$(date +'%F %H:%M:%S')]使用shutdown命令關閉成功!"
fi
else
echo "[info][$(date +'%F %H:%M:%S')]tomcat未啟動!"
fi
echo "[info][$(date +'%F %H:%M:%S')]準備啟動tomcat..."
$binPath"/startup.sh"

指令碼的邏輯比較簡單,先檢視tomcat程序是否存在,如果不存在則直接呼叫startup.sh命令啟動tomcat,如果tomcat的程序存在則呼叫shutdown.sh命令停掉tomcat服務,有時會關閉失敗,所以在檢查一下tomcat程序時候還存在,如果存在就使用kill命令殺掉該程序,然後啟動tomcat。
這裡有一個地方需要注意,第二行程式碼(. /etc/profile)不能省掉,需要將環境變數引入到當前指令碼環境中,要不然會導致啟動定時任務時執行指令碼失敗,會報以下錯誤:

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program

二、修改檔案許可權

要讓指令碼可以執行,當然要把檔案設定為可執行檔案了。

chmod 777 tomcat.sh

三、建立定時任務

在控制檯上輸入使用crontab -e 命令進入編輯crontab指令碼,第一次輸入該命令時需要選擇編輯器。

選擇vim編輯器編輯就可,在檔案後面增加一條任務。(我的指令碼檔案路徑是:/home/script/tomcat.sh)

然後儲存並退出即可,接著使用crontab -l命令即可看到剛才新增的定時任務在列表裡面。一般情況是直接生效,如果沒有生效可以使用sudo service cron restart命令重啟定時任務。

sudo service cron restart

四、定時任務描述語法

crontab中每一個定時任務的格式由6部分組成,分別是分鐘、小時、天、月、星期以及命令,前5部分用來設定任務觸發時機,中間使用空格隔開,如下:
minute hour day month dayofweek command

minute – 表示分鐘,值的範圍是從0到59的整數 

hour – 表示小時,值的範圍是從0到23的整數 

day – 表示天,值的範圍是從1到31的整數

month – 表示月,值的範圍是從1到12的整數

dayofweek – 表示星期,值的範圍是從0到6的整數 (0表示週日)

command – 需要執行的命令(/home/script/tomcat.sh > /home/script/shlog.txt表示執行tomcat.sh指令碼,並且把結果紀錄檔列印到shlo.txt中)

 時間部分除了使用估計數位以外還可以配合星號(*),逗號(,),斜槓(/),橫槓(-)組合來表示其他意義。

1. 星號(*)

表示任意值,比如:

30 01 * * * command #每天的1:30執行命令

2. 逗號(,)

表示指定的時間,比如:

30 01 1,10,20 * * command #每月的1號、10號、20號的1:30分執行命令

3. 斜槓(/)

表示每隔多長時間,比如:

* */2 * * * command #每個2小時執行一次命令

4. 橫槓(-)

表示連續時間,比如:

* 1-7/1 * * * command #凌晨1點-7點之前每隔一小時執行一次命令

五、其他

到此這篇關於Linux系統上實現定時重啟Tomcat服務指令碼介紹的文章就介紹到這了,更多相關Linux系統 定時重啟Tomcat內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com