Linux系統上實現定時重啟Tomcat服務腳本介紹

因為使用阿裡雲部署服務器應用時,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點之前每隔一小時執行一次命令

五、其他

以上哪裡寫的不對或者有待改進,歡迎大傢提意見,謝謝!
轉載請註明出處:http://www.luoxudong.com/?p=330

到此這篇關於Linux系統上實現定時重啟Tomcat服務腳本介紹的文章就介紹到這瞭,更多相關Linux系統 定時重啟Tomcat內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: