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!
推薦閱讀:
- MySQL 數據庫定時備份的幾種方式(全面)
- MySQL定時全庫備份數據庫
- Spring Boot jar 啟動時設置環境參數的操作
- .net 程序通過 crontab 無法啟動手動執行腳本啟動的方法
- docker搭建jenkins+maven代碼構建部署平臺