該腳本改自csdn上的一個shell,忘記出處了,只記得它可以簡單的經過service tomcat [stop|start|restart]
來方便的管理Linux服務器上的tomcat,這能夠知足大部分人的需求,然而並不適合我所管理的CentOS上的tomcat應用:經過端口區分的3臺tomcat集羣。若是每一次管理tomcat或查看日誌,都cd /apps/test/tomcat0/log/
而後切換到另一個cd ../../
或cd /apps/test/tomcat1/log/
,麻煩至極。所以「懶人」創造了這個腳本tomcat
:shell
#!/bin/bash # author: Sean Chow (seanlook7@gmail.com) # # # chkconfig: 345 80 15 # description: Multiple tomcats service management script. # Source function library. . /etc/rc.d/init.d/functions # 第幾個tomcat tcNo=$1 tcName=tomcat$1 basedir=/apps/test/$tcName tclog=${basedir}/logs/catalina.$(date +%Y-%m-%d).out RETVAL=0 start(){ checkrun if [ $RETVAL -eq 0 ]; then echo "-- Starting tomcat..." $basedir/bin/startup.sh touch /var/lock/subsys/${tcNo} checklog status else echo "-- tomcat already running" fi } # 中止某一臺tomcat,若是是重啓則帶re參數,表示不查看日誌,等待啓動時再提示查看 stop(){ checkrun if [ $RETVAL -eq 1 ]; then echo "-- Shutting down tomcat..." $basedir/bin/shutdown.sh if [ "$1" != "re" ]; then checklog else sleep 5 fi rm -f /var/lock/subsys/${tcNo} status else echo "-- tomcat not running" fi } status(){ checkrun if [ $RETVAL -eq 1 ]; then echo -n "-- Tomcat ( pid " ps ax --width=1000 |grep ${tcName}|grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' echo -n ") is running..." echo else echo "-- Tomcat is stopped" fi #echo "---------------------------------------------" } # 查看tomcat日誌,帶vl參數 log(){ status checklog yes } # 若是tomcat正在運行,強行殺死tomcat進程,關閉tomcat kill(){ checkrun if [ $RETVAL -eq 1 ]; then read -p "-- Do you really want to kill ${tcName} progress?[no])" answer case $answer in Y|y|YES|yes|Yes) ps ax --width=1000 |grep ${tcName}|grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}'|xargs kill -9 status ;; *);; esac else echo "-- exit with $tcName still running..." fi } checkrun(){ ps ax --width=1000 |grep ${tcName}| grep "[o]rg.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' | wc | awk '{print $2}' >/tmp/tomcat_process_count.txt read line < /tmp/tomcat_process_count.txt if [ $line -gt 0 ]; then RETVAL=1 return $RETVAL else RETVAL=0 return $RETVAL fi } # 若是是直接查看日誌viewlog,則不提示輸入[yes],不然就是被stop和start調用,需提示是否查看日誌 checklog(){ answer=$1 if [ "$answer" != "yes" ]; then read -p "-- See Catalina.out log to check $2 status?[yes])" answer fi case $answer in Y|y|YES|yes|Yes|"") tail -f ${tclog} ;; *) # status # exit 0 ;; esac } checkexist(){ if [ ! -d $basedir ]; then echo "-- tomcat $basedir does not exist." exit 0 fi } case "$2" in start) checkexist start exit 0 ;; stop) checkexist stop exit 0 ;; restart) checkexist stop re start exit 0 ;; status) checkexist status #$basedir/bin/catalina.sh version exit 0 ;; log) checkexist log exit 0 ;; kill) checkexist status kill exit 0 ;; *) echo "Usage: $0 {start|stop|restart|status|log|kill}" echo " service tomcat {0|1|..} {start|stop|restart|status|log|kill}" esac exit 0
使用說明:
1. 使用前設定好baseDir
(多tomcat所在路徑),各tomcat命名如tomcat0
、tomcat1
...
2. 腳本名字爲tomcat
,放到/etc/init.d/
下,並基於可執行權限chmod +x /etc/init.d/tomcat
3. 執行用戶不容許用root
,特別是在線上環境
4. 已處理其餘錯誤參數輸入,可用於正式環境
5. 你也能夠修改tcName
來適應管理一個tomcat服務的情形
6. 使用,如下針對tomcat0
(/apps/test/tomcat0
)apache
service tomcat 0 start 啓動,默認回車會查看啓動日誌;已啓動則僅輸出進程號 service tomcat 0 stop 中止,默認回車會查看日誌;已中止則無動做;沒法中止,則提示是否`kill`(默認No) service tomcat 0 restart 重啓tomcat,有日誌輸出 service tomcat 0 status 查看tomcat是否啓動 service tomcat 0 log 使用`tail -f`命令實時查看日誌 service tomcat 0 kill 直接`kill`tomcat進程;儘可能少用
TO-DO
加入service tomcat 0 clean
命令來清除work
和tmp
目錄,正在運行的不容許清除。tomcat
這個腳本最近(2014/11/13)在使用過程當中發現一個新的問題,由於服務器上tomcat一直開啓着監控端口7091,因此在service tomcat 1 start
失敗之後,7091端口就被佔用了,但使用service tomcat 1 status
狀態時stopped
,其實仍是有這個失敗的tomcat進程,但用service tomcat 1 kill
會失敗。腳本里在考慮這個功能的話就有點臃腫了,仍是老實結合手動管理吧。bash
原文連接地址:http://seanlook.com/2014/10/29/multiple-tomcats-service-script/服務器