自動重新開機tomcat及重新開機後亂碼問題
Tomcat作為開源的伺服器,性能與穩定性上比起一些商業伺服器還是要差一些。将項目部署到Tomcat後隔段時間就會死掉,出現
這種問題的主要原因可 能是記憶體資料溢出,因為Tomcat容器在發生大量與資料庫互動查詢或者操作的時候很容易出現問題。定時重新開機
是一個很好的補救措施,定時重新開機可以定時的清 理記憶體也降低了Tomcat運作的風險,進而保持tomcat的最佳性能。
定時執行的指令是crontab,編輯/var/spool/cron/下的root檔案(路徑根據系統的不同可能不同,沒有root檔案就建立),加入以下兩行:
1 6 * * * /usr/local/apache-tomcat-6.0.20/bin/shutdown.sh
2 6 * * * /usr/local/apache-tomcat-6.0.20/bin/startup.sh
其中開頭的1 6 * * *表示在每天的早上6點1分執行,詳細介紹請百度之。
這樣在關閉之後1分種再開啟tomcat。
你可能要問,可不可以都在6點1分執行,即都寫成1 6 * * *? 答案是不行,雖然開啟tomcat的指令寫在關閉的下面,但同一時間的指令并不是按寫的先後順序執行的,有可能先執行了開啟的指令,後執行關閉的指令,這樣今天tomcat就用不了了。
當然你可以把這兩行指令(去掉前面的1 6 * * *)寫在一個restartTomcat.sh檔案裡,中間加一行sleep 10s,然後在root檔案裡加一句1 6 * * * restartTomcat.sh。如此就可以每天早上6點1分自動重新開機tomcat了。
問題集錦:
1、有些地方顯示的漢字是亂碼,手工重新開機tomcat後就沒有亂碼了。原因是手工重新開機與預設系統任務自動重新開機的字元集是不一樣的,這是因為Unix/Linux下使用crontab是的運作環境以及不是使用者環境了,是以原本使用者下的一些環境變量的設定就失效了。例如原來使用者環境變量設定的是GB2312,但是使用crontab運作時的環境變量就可能是ISO8859-1。解決方法是編輯/usr/local/apache-tomcat-6.0.20/bin/catalina.sh,在裡面加一行:
CATALINA_OPTS=-Dfile.encoding=UTF8
就OK了(具體編碼根據頁面編碼修改)。
2、如果還不起作用,可以試試以下方法。
修改目前使用者下 .bash_profile 檔案,添加一行
export LANG=en_US.UTF-8
之後在定時腳本裡引入此檔案。
! /usr/local/bin/bash
. /home/username/.bash_profile
注意,在/home/username/.profile前面有一個點和空格。
Linux 下.(點)開頭的檔案預設是隐藏,可以用 ll -a 指令檢視。
3、使用crontab 的時候還要注意一點。
使用方式 :
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
說明 :
-u user 是指設定指定 user 的時程表,這個前提是你必須要有其權限(比如說是 root)才能夠指定他人的時程表。如果不使用 -u user 的話,就是表示設定自己的時程表。
-u user 此參數省略的話,預設編輯目前使用者的crontab。
例子:crontab -u tom /home/tom/test.cron
導入tom使用者下,test.cron這個時程表,此檔案可以自己建立,然後寫一些執行腳本,前提是這個腳本必須有執行的權限,不然會失敗。
假設 test.cron 裡引用了,back.sh 這個腳本,那麼可用 chomd +x /home/tom/backup.sh (增加可執行權限)
可以直接執行此腳本試試,然後再放到crontab裡。
這樣在/var/spool/cron目錄下會增加一個tom的檔案,就是tom使用者的時程表了,一般還會有root這個檔案。
如果是root使用者要編輯此crontab的話,可使用
crontab -u tom -e //編輯
crontab -u tom -l //檢視
cron 服務每分鐘不僅要讀一次/var/spool/cron内的所有檔案,還需要讀一次/etc/crontab,是以我們配置這個檔案也能運用cron服務做一些事情。用crontab配置是針對某個使用者的,而編輯/etc/crontab是針對系統的任務。此檔案的檔案格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有資料輸出,資料作為郵件發給這個帳号
HOME=/ //使用者運作的路徑,這裡是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly内的腳本
02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily内的腳本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行/etc/cron.weekly内的腳本
42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly内的腳本
還要注意/etc/目錄下兩個檔案。
/etc/cron.deny
該檔案中所列的使用者不允許使用Crontab指令
/etc/cron.allow
該檔案中所列的使用者允許使用Crontab指令
如果都存在則以/etc/cron.allow 優先。