Linux 下啟動兩個tomcat


閑來無事學習nginx,想要配置個load balance。可是先決條件是:得有兩個web容器。兩個電腦是不用想了。只能想辦法在一個機器上啟動兩個tomcat。原以為挺簡單的,只要改改port就好了。誰知單單改port壓根不會成功。網上找了很多解決方案,要么繁雜的要死,要么說的雲里霧里的。於是決定結合網上的說法和自己的想法,重新寫一個方案。

先說解決方案吧。(我用的是tomcat-7.0.62,安裝的路徑是/usr/local/apache-tomcat-7.0.62)

1.先把原來的tomcat復制一份,地址隨便放,文件名隨便取。我復制為 /usr/local/apache-tomcat-7.0.62-copy

2.修改/usr/local/apache-tomcat-7.0.62-copy/conf/server.xml,用意是不要讓端口與原來的沖突了

  在此server.xml中一共有三個port,下面列出的是默認的設置。這三個端口都要修改。(我一開始的想法是只要簡單的后面加個1,變成80051,80801,80091,反正只要端口最大不超過65535就行了。結果報什么端口out of range 錯誤。。。。。)好吧,那就分別改為8006,8081,8010好了

1 <!--這個好像是關閉的端口,具體作用不清楚-->
2 <Server port="8005" shutdown="SHUTDOWN">
3  
4 <!--這個應該知道是什么端口吧-->
5  <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000“ redirectPort="8443" />
6  
7  
8  <!--注釋上說是什么AJP 1.3的連接端口,具體什么作用還是不清出-->
9  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

 

3.在~/.bash_profile中添加下面兩個。 

1 export CATALINA_BASE2=/usr/local/apache-tomcat-7.0.62-copy
2 export CATALINA_HOME2=/usr/local/apache-tomcat-7.0.62-copy

修改完成后用命令 source ~/.bash_profile使新配置的環境變量生效

 可以看到這兩行的作用是添加環境變量,但是添加環境變量的方法並不只這一種。所以無論用什么方法,達到添加這兩個環境變量的目的就行了。

4.修改/usr/local/apache-tomcat-7.0.62-copy//bin/catalina.sh, 在開頭的位置添加下面綠色的兩行。(差不多就是在catalina.sh開始的位置)

 

 1 # resolve links - $0 may be a softlink
 2 PRG="$0"
 3 
 4 while [ -h "$PRG" ]; do
 5   ls=`ls -ld "$PRG"`
 6   link=`expr "$ls" : '.*-> \(.*\)$'`
 7   if expr "$link" : '/.*' > /dev/null; then
 8     PRG="$link"
 9   else
10     PRG=`dirname "$PRG"`/"$link"
11   fi
12 done
13 
14 # Get standard environment variables
15 PRGDIR=`dirname "$PRG"`
16 
17 # Only set CATALINA_HOME if not already set
18 [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
19 
20 # Copy CATALINA_BASE from CATALINA_HOME if not already set
21 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
22 
23 CATALINA_HOME=$CATALINA_HOME2
24 CATALINA_BASE=$CATALINA_BASE2

 

5. 分別啟動兩個tomcat就好了。

 

好吧,下面的東西是我自己看catalina.sh的解釋,與啟動兩個tomcat沒有任何關系。

上面第四步的那一段代碼的目的就是取得 CATALINA_HOME和CATALINA_BASE。

  一開始這一段是說如果sh是鏈接的話的處理方法。$0就是bash文件的名稱。

 1 # resolve links - $0 may be a softlink
 2 PRG="$0"
 3 
 4 while [ -h "$PRG" ]; do
 5   ls=`ls -ld "$PRG"`
 6   link=`expr "$ls" : '.*-> \(.*\)$'`
 7   if expr "$link" : '/.*' > /dev/null; then
 8     PRG="$link"
 9   else
10     PRG=`dirname "$PRG"`/"$link"
11   fi
12 done

 

 下面有一句就是取得bash所在的文件夾。

1 # Get standard environment variables
2 PRGDIR=`dirname "$PRG"`

 

再下面注釋寫的很清楚了,如果我們配置了CATALINA_HOME的環境變量,那就什么都不干,如果沒有配置,那就讓變量CATALINE_HOME指向 PRGIDR的父目錄,實際就是tomcat安裝目錄。

1 # Only set CATALINA_HOME if not already set
2 [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
3 
4 # Copy CATALINA_BASE from CATALINA_HOME if not already set
5 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

 

我們的修改的意思是不管前面CATALINA_HOME和CATALINA_BASE設置為了什么,反正最后我一刀切,全設置為我想要的,即如下的代碼

1 CATALINA_HOME=$CATALINA_HOME2
2 CATALINA_BASE=$CATALINA_BASE2

 

 

下面還有一個說明:

理論上來講上面的配置就可以了。可是有一點小小的瑕疵:假設環境變量$CATALINA_HOME2$CATALINA_BASE2是設在root用戶下的,那么tomcat救只能用root用戶啟動了,別的用戶根本啟動不了。

並且,如果某個不知道catalina.sh已經被修改過的人復制apache-tomcat-7.0.62-copy到另外的地方,比如另一台服務器,他會發現tomcat啟動不了了。。。其實catalina.sh這么寫更好,即把綠色的那兩行往前移一移就好了

 1 # resolve links - $0 may be a softlink
 2 PRG="$0"
 3 
 4 while [ -h "$PRG" ]; do
 5   ls=`ls -ld "$PRG"`
 6   link=`expr "$ls" : '.*-> \(.*\)$'`
 7   if expr "$link" : '/.*' > /dev/null; then
 8     PRG="$link"
 9   else
10     PRG=`dirname "$PRG"`/"$link"
11   fi
12 done
13 
14 # Get standard environment variables
15 PRGDIR=`dirname "$PRG"`
16 
17 CATALINA_HOME=$CATALINA_HOME2
18 CATALINA_BASE=$CATALINA_BASE2
19 
20 # Only set CATALINA_HOME if not already set
21 [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
22 
23 # Copy CATALINA_BASE from CATALINA_HOME if not already set
24 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM