本文由ilanniweb提供友情贊助,首發於爛泥行天下java
想要得到更多的文章,能夠關注個人微信ilanniwebnode
公司的業務是使用tomcat作web容器,爲了更有效的利用服務器的性能,咱們通常部署多個tomcat作業務的負載均衡。web
1、業務需求shell
目前一臺服務器上,部署了4個tomcat,也就至關於4個節點。平時在維護業務時,須要咱們一個一個tomcat實例進行單獨的維護,感受很不方便,因此就有了這篇文章。apache
可是爲了更方便的管理這4個tomcat,我這邊作了兩方面的工做,一是把全部的tomcat工做目錄都指向另外單獨的一個目錄下,二是經過shell來啓動、關閉和重啓tomcat。ubuntu
PS:本次實驗的測試OS爲centos6.5 64bit,可是shell腳本也能夠在ubuntu下使用。centos
2、修改tomcat工做目錄api
爲了避免一個一個單獨的維護tomcat實例,首先咱們來修改tomcat實例的工做目錄。全部的tomcat配置文件位於conf目錄下的server.xml文件。緩存
咱們只須要修改server.xml文件的appBase配置項,這樣就能夠指定tomcat實例的工做目錄。以下:tomcat
咱們須要把每個tomcat實例server.xml配置文件的appBase配置項,修改成/app/tomcat/apiwebapps。
以上修改完畢後,咱們須要建立/app/tomcat/apiwebapps目錄。
mkdir -p /app/tomcat/apiwebapps
tree -L 3 /app/
如今咱們能夠查看node1爲例,查看該tomcat實例的目錄結構,以下:
tree -L 1 ./node1
注意:這4個tomcat所監聽的端口是不一樣的,不然沒法啓動tomcat。
有關tomcat的單機多實例,能夠看個人下一篇文章《爛泥:學習tomcat之tomcat單機多實例》。
3、建立shell腳本
如今我是把4個tomcat實例都放到/app/tomcat目錄下, 這4個tomcat實例目錄名稱分別爲node一、node二、node三、node4。 能夠看出這4個tomcat實例的命名規則爲node${i}。如今開始編寫shell腳本。
3.1 新建ilanni.sh腳本
新建一個shell文件命名爲 ilanni.sh,內容以下:
#!/bin/bash
# Apache Tomcat daemon
# chkconfig: 345 10 10
# description: Apache Tomcat daemon
# processname: tomcat
echo "  ______                           __   "
echo " /_  __/___  ____ ___  _________ _/ /_  "
echo "  / / / __ \/ __  __ \/ ___/ __  / __/  "
echo " / / / /_/ / / / / / / /__/ /_/ / /_    "
echo "/_/  \____/_/ /_/ /_/\___/\__,_/\__/    "
echo "                                        "
#定義JAVA_HOME
export JAVA_HOME=/usr/local/java/jdk1.7.0_80
#定義多個tomcat的總目錄,/app/tomcat目錄下有node一、node二、node三、node4 四個tomcat實例。
tom="/app/tomcat/node"
#定義啓動腳本路徑
startup_bin="bin/startup.sh"
#定義tomcat的啓動方式,啓動方式爲tomcat.sh p1 start相似的命令
usage="{p1|p2|p3|all} {start|stop|restart|status}"
dev="/dev/null"
#定義如何啓動tomcat,在此咱們是經過個數tomcat以及前面定義的tomcat的命令,來操做tomcat
#judge $1 $2 whether null
if [ "$1" == "" -o "$2" == "" ];then
    echo
     echo "Usage: $0 $usage"
    echo
exit 1
fi
#judge $1
case $1 in
   "p1")
    tomcats="1"
;;
   "p2")
    tomcats="1 2"
;;
   "p3")
    tomcats="1 2 3"
;;
   "all")
    tomcats="1 2 3 4"
;;
   *)
   echo "Usage: $0 $usage"
;;
esac
#定義tomcat的啓動
#define start function
tomcatstart() {
for i in $tomcats
  do
  tom_home="$tom$i"
  run_status=$(ps -ef | grep -v 'grep' | egrep "java.*=${tom_home}")
if [ "${run_status}X" != "X" ];then
echo "node$i is already running..."
else
${tom_home}/${startup_bin} &>$dev
echo "node$i starting,Please wait 2s..."
sleep 2
fi
done
}
#定義tomcat的關閉
#define stop function
tomcatstop() {
for j in $tomcats
do
tom1_home="$tom$j"
tomcat_pid=$(ps -ef | grep ${tom1_home} | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $2}')
if [ "${tomcat_pid}X" == "X" ];then
echo "node$j is not running..."
else
kill -9 ${tomcat_pid} & >$dev
echo "node$j stopping,Please wait 1s..."
sleep 1
echo "delte node$j cache,Please wait 1s..."
rm -rf ${tom1_home}/work/*
fi
done
}
#定義tomcat的重啓
#define restart function
tomcatrestart() {
for m in $tomcats
do
tom2_home="$tom$m"
run2_status=$(ps -ef | grep -v 'grep' | egrep "java.*=${tom2_home}")
if [ "${run2_status}X" == "X" ];then
echo "node$m is not running..."
${tom2_home}/${startup_bin} &>$dev
echo "node$m starting,Please wait 2s..."
sleep 2
else
ps -ef | grep ${tom2_home} | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $2}'| xargs kill -9 >$dev
echo "node$m stopping,Please wait 2s..."
sleep 1
${tom2_home}/${startup_bin} &>$dev
echo "node$m starting,Please wait 2s..."
sleep 2
fi
done
}
#定義tomcat的狀態
#define status function
tomcatstatus() {
for n in $tomcats
do
tom3_home="$tom$n"
run3_status=$(ps -ef | grep -v 'grep' | egrep "java.*=${tom3_home}")
if [ "${run3_status}X" == "X" ];then
echo "node$n is not running..."
else
echo "node$n is running"
fi
done
}
#judge $2
case $2 in
    "start")
    tomcatstart
;;
    "stop")
    tomcatstop
;;
   "restart")
   tomcatrestart
;;
   "status")
   tomcatstatus
;;
   *)
   echo "Usage: $0 $usage"
;;
esac
3.2 修改ilanni.sh文件權限
ilanni.sh腳本建立完畢後,如今咱們來修改ilanni.sh的執行權限。以下:
chmod +x ilanni.sh
4、啓動與關閉tomcat
ilanni.sh權限修改完畢以後,咱們就能夠來啓動這4個tomcat實例了。好比如今想啓動node1和node2這兩個實例,咱們能夠經過如下命令來啓動。
./ilanni.sh p2 start
./ilanni.sh p2 status
經過上圖,能夠很明顯的看出實例node一、node2已經啓動了。
tomcat啓動後,若是要中止的話,咱們可使用以下命令:
./ilanni.sh p2 stop
經過上圖,咱們能夠看到,咱們已經把實例node一、node2停掉了,並且咱們也刪除了實例node一、node2的緩存。
以上咱們是以啓動兩個tomcat實例爲例的,若是啓動或者關閉是一個、三個以及全部tomcat實例的話,咱們可使用以下命令。
./ilanni.sh p1 start
./ilanni.sh p3 start
./ilanni.sh all start
固然相應的關閉、重啓和查看狀態命令,分別以下。
關閉命令:
./ilanni.sh p1 stop
./ilanni.sh p3 stop
./ilanni.sh all stop
查看狀態命令:
./ilanni.sh p1 status
./ilanni.sh p3 status
./ilanni.sh all status
注意:該shell腳本只能按照node一、node二、node三、node4等依次執行下去,不能單獨的中止和啓動tomcat實例,除node1外。
5、把ilanni腳本加入系統服務
爲了操做更方便,咱們能夠把ilanni.sh這個腳本加入到系統服務中。具體操做方法以下:
cp ilanni.sh /etc/init.d/ilanni
chkconfig --add /etc/init.d/ilanni
chkconfig ilanni on
查看是否已添加進服務列表
chkconfig --list |grep ilanni
添加到服務之後, 就能夠這樣以服務方式來啓動和中止、重啓tomcat實例了。以下:
/etc/init.d/ilanni p2 start
/etc/init.d/ilanni p2 status
經過上圖,咱們能夠出,ilanni.sh腳本已經就加入到系統服務之中了。
到此有關經過shell批量管理tomcat的文章就結束了。