Tomcat基礎配置和高級配置


**********  第一部分 Tomcat基礎配置   ***********


一、Apatch Tomcat 在win下配置

大部分轉載自:http://blog.csdn.net/liuhaomatou/article/details/39893897

首先從官方網站http://tomcat.apache.org/下載Tomcat,我這里下載的是最新版本的Tomcat8.0

下載后解壓得到:


進入到bin目錄下面:

運行tomcat8w.exe tomcat8.exe ,提示 指定的服務未安裝 unable to open the service 'tomcat8'


解決方法:

打開命令行提示符窗口=> 進入Tomcat安裝目錄==> 進入bin目錄下==> 輸入:

service.bat install //這個命令的實質就是給windows安裝一個服務

這個時候會提示:

The CATALINA_HOME environment variable is not defined correctly 的錯誤信息。

這個是因為環境變量沒有配置正確導致的。

解決方法如下:
      1、JAVA_HOME中的路徑不能使用分號結尾,如
             E:\Java\jdk1.6.0_10;
          這樣寫就會出現提示CATALINA_HOME或是JAVA_HOME沒有配置好的錯誤,,還有就是JAVA_HOME的路徑一定不要寫成了JRE的路徑
      2、CATALINA_BASE,CATALINA_HOME,TOMCAT_HOME中的路徑不能以"\"結尾,如
             E:\Java\apache-tomcat-6.0.29\
          這樣寫就會出現java.util.logging.ErrorManager的錯誤,屏幕一閃而過
     正確的寫法:
           JAVA_HOME            C:\Program Files\Java\jdk1.8.0_11
           CATALINA_BASE      D:\tools\apache-tomcat-8.0.14-windows-x64\apache-tomcat-8.0.14
           CATALINA_HOME    D:\tools\apache-tomcat-8.0.14-windows-x64\apache-tomcat-8.0.14
           TOMCAT_HOME       D:\tools\apache-tomcat-8.0.14-windows-x64\apache-tomcat-8.0.14
事實上,tomcat的核心就是catalina,startup.sh, shutdown.sh本質就是調用catalina命令
配置好了環境變量后在重新打開運行->cmd->進入到tomcat8.0的bin目錄下運行:
service.bat install</span>
這個時候就會提示如下信息:
 
        最后在進入到tomcat8.0的解壓后的bin目錄下運行tomcat8w.exe 即可 
        

在瀏覽器網頁中輸入:http://localhost:8080/ 后不能打開,是因為Tomcat沒有啟動,點擊如下圖片所示的start按鈕即可以啟動。

二、Apatch Tomcat 在Linux 和 MacOS上的配置問題

1、下載壓縮包

2、解壓縮

3、配置環境變量,這里重點介紹兩個方法

(1)方法一,修改~/.bash_profile文件

export PATH=$PATH:/Users/fuhua/Documents/Tomcat/apache-tomcat-8.0.30/bin

完了之后可以在bash中,輸入startup.sh, shutdown.sh進行開啟和關閉tomcat

(2)方法二,寫一個腳本文件,丟入/usr/bin變為全局命令,更加靈活和方便

執行方法,bash中輸入tomcat start 之類


   
   
  
  
          
  1. #!/bin/bash
  2. case $ 1 in
  3. start)
  4. sh /Library/Tomcat/bin/startup.sh
  5. ;;
  6. stop)
  7. sh /Library/Tomcat/bin/shutdown.sh
  8. ;;
  9. restart)
  10. sh /Library/Tomcat/bin/shutdown.sh
  11. sh /Library/Tomcat/bin/startup.sh
  12. ;;
  13. *)
  14. echo “Usage: start|stop|restart”
  15. ;;
  16. esac
  17. exit 0
 
        

**********  第二部分 Tomcat高級配置   ***********

1、修改Tomcat端口

Tomcat默認監聽的是8080端口,如果想修改此端口號,打開

D:\Program Files\apache-tomcat-8.0.3\conf\server.xml,找到如下代碼段,修改port屬性即可

  1. <Connector port="8080" protocol="HTTP/1.1"  
  2.                connectionTimeout="20000"  
  3.                redirectPort="8443" />

2、Tomcat設置https

(1)制作xx.keystore文件

在命令行下輸入如下命令:

keytool -genkey -alias tomcat -keyalg RSA -keystore D:\test.keystore

(keytool.exe 在C:\Program Files\Java\jdk1.7.0_51\bin目錄下。因為已設置jdk環境變量,因此可以在命令行下可直接使用keytool)

密鑰庫口令隨意填,最后一步的密鑰口令也隨意填,也可以選擇跟密鑰庫口令一樣(按”Enter”鍵即可)

 

D盤下可以看到test.keystore 文件

(2) 修改server.xml

打開D:\Program Files\apache-tomcat-8.0.3\conf\server.xml,找到如下代碼段

[html]  view plain  copy
  在CODE上查看代碼片 派生到我的代碼片
  1. <!--  
  2.     <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  
  3.                maxThreads="150" scheme="https" secure="true"  
  4.                clientAuth="false" sslProtocol="TLS" />  
  5. -->  

將注釋打開,並修改Connector 標簽內容,keystorePass為密鑰庫口令

[html]  view plain  copy
  1. <Connector port="8443"   
  2.            protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"  
  3.                maxThreads="150" scheme="https" secure="true"  
  4.            keystoreFile="D:\tomcat.keystore" keystorePass="password"  
  5.                clientAuth="false" sslProtocol="TLS" />  

重啟Tomcat,在瀏覽器下輸入https://localhost:8443,即可看到Tomcat首頁

3、iOS, Android設置https

具體實現,參考這篇文章,有點小復雜

http://blog.csdn.net/wangyadong99/article/details/49124413

4、Tomcat設置默認WEB項目

修改后的Host 標簽

[html]  view plain  copy
  在CODE上查看代碼片 派生到我的代碼片
  1. <Host name="localhost"  appBase="webapps"  
  2.             unpackWARs="true" autoDeploy="true">  
  3.     <Context path="" docBase="examples" reloadable="true" crossContext="true">  
  4.     </Context>  
  5.         <!-- SingleSignOn valve, share authentication between web applications  
  6.              Documentation at: /docs/config/valve.html -->  
  7.         <!-- 
  8.         <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
  9.         -->  
  10.    
  11.         <!-- Access log processes all example.  
  12.              Documentation at: /docs/config/valve.html  
  13.              Note: The pattern used is equivalent to using pattern="common" -->  
  14.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
  15.                prefix="localhost_access_log" suffix=".txt"  
  16.                pattern="%h %l %u %t "%r" %s %b" />  
  17.    
  18.       </Host>  

重新啟動Tomcat,在瀏覽器下輸入http://localhost:8080,即可看到examples的首頁

訪問http://localhost:8080/host-manager/index.jsp,會提示輸入用戶名、密碼,點”取消”,會彈出錯誤頁面,根據此錯誤頁面可以找到設置Tomcat賬號的辦法

打開D:\Program Files\apache-tomcat-8.0.3\conf\tomcat-users.xml,在tomcat-users標簽下添加如下內容

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <role rolename="admin-gui"/>  
  2.  <user username="tomcat" password="s3cret" roles="admin-gui"/>  

重啟Tomcat,然后訪問http://localhost:8080/host-manager/index.jsp,用戶名輸入tomcat,密碼輸入s3cret,即可

5、修改Session有效時間

默認情況下,Session有效時間為30分鍾。打開\conf\web.xml,修改session-timeout標簽的值

[html] view plain copy
  1. <session-config>  
  2.         <session-timeout >30</session-timeout>  
  3. </session-config>  
下面的7以后的參考鏈接:http://my.oschina.net/neochen/blog/146372

6、maxThreads 連接數限制

maxThreads 是 Tomcat 所能接受最大連接數。一般設置不要超過8000以上,如果你的網站訪問量非常大可能使用運行多個Tomcat實例的方法。

即,在一個服務器上啟動多個tomcat然后做負載均衡處理。


    
    
   
   
           
  1. <Connector port="8080" address="localhost"
  2. maxThreads= "2048" maxHttpHeaderSize= "8192"
  3. emptySessionPath= "true" protocol= "HTTP/1.1"
  4. enableLookups= "false" redirectPort= "8181" acceptCount= "100"
  5. connectionTimeout= "20000" disableUploadTimeout= "true" />

提示

很多做過php運維的朋友在這里會犯一個大錯誤,php優化服務器通常怎做法是安裝cpu以及內存的情況配置連接數,連接數過萬都很正常,但java不同jvm配置要非常小心,稍有差錯就會崩潰。

maxThreads 配置要結合 JVM -Xmx 參數調整,也就是要考慮內存開銷。

虛擬主機

不要使用Tomcat的虛擬主機,每個站點一個實例。即,啟動多個tomcat.

這也是PHP運維在這里常犯的錯誤,PHP的做法是一個Web下面放置多個虛擬主機,而不是每個主機啟動一個web服務器。Tomcat 是多線程,共享內存,任何一個虛擬主機中的應用出現崩潰,會影響到所有應用程序。采用多個實例方式雖然開銷比較大,但保證了應用程序隔離與安全。


7、壓錯傳輸

通常所說的gzip壓縮,Tomcat通過在server.xml配置設置壓縮的選項。


        
        
       
       
               
  1. <Connector port="8080" protocol="HTTP/1.1"
  2. connectionTimeout= "20000"
  3. redirectPort= "8443"
  4. compression= "on"
  5. compressionM inSize1= "2048"
  6. noCompressionUserAgents= "gozilla, traviata"
  7. compressableMimeType= "text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"/>

提示

壓縮會增加Tomcat負擔,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,壓縮交由Nginx/Apache 去做。


8、Tomcat 安全配置(保證資源安全)

8.1 安裝后初始化配置

當Tomcat完成安裝后你首先要做的事情如下:

首次安裝完成后立即刪除webapps下面的所有代碼(已經沒有用了)

rm -rf /srv/apache-tomcat/webapps/*
       
       
      
      
              

注釋或刪除 tomcat-users.xml 所有用戶權限,看上去如下:


        
        
       
       
               
  1. # cat conf/tomcat-users.xml
  2. <?xml version='1.0' encoding='utf-8'?>
  3. <tomcat-users>
  4. </tomcat-users>

隱藏Tomcat版本信息


        
        
       
       
               
  1. vim $CATALINA_HOME/conf/server.xml
  2. <Connector port= "80" protocol= "HTTP/1.1"
  3. connectionTimeout= "20000"
  4. redirectPort= "8443"
  5. maxThreads= "8192"
  6. minSpareThreads= "64"
  7. maxSpareThreads= "128"
  8. acceptCount= "128"
  9. enableLookups= "false"
  10. server= "Neo App Srv 1.0"/>
  11. # curl -I http://localhost:8080/
  12. HTTP/ 1 . 1 400 Bad Request
  13. Transfer-Encoding: chunked
  14. Date: Thu, 20 Oct 2011 09: 51: 55 GMT
  15. Connection: close
  16. Server: Neo App Srv 1 . 0

服務器信息已經被改為 Server: Neo App Srv 1.0

8.2 啟動用戶與端口

不要使用root用戶啟動tomcat,Java程序與C程序不同。nginx,httpd 使用root用戶啟動守護80端口,子進程/線程會通過setuid(),setgid()兩個函數切換到普通用戶。即父進程所有者是root用戶,子進程與多線程所有者是一個非root用戶,這個用戶沒有shell,無法通過ssh與控制台登陸系。Java 的JVM 是與系統無關的,是建立在OS之上的,你使用什么用戶啟動Tomcat,那麽Tomcat 就會繼承該所有者的權限。

這造成了一個問題,Linux系統小於1024的端口只有root可以使用,這也是為什么Tomcat默認端口是8080。如果你想使用80端口只能使用root啟動Tomcat。這有帶來了很多安全問題。

解決方案是創建一個不同用戶,如:


        
        
       
       
               
  1. groupadd -g 80 daemon
  2. adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 - c "Web Server" daemon

注意 /sbin/nologin , 意味着該用戶不能登錄,同時我也沒有給它指定密碼,這個用戶只能用於啟動tomcat


        
        
       
       
               
  1. chown daemon:daemon -R /srv/*
  2. su - daemon -c "/srv/apache-tomcat/bin/startup.sh"

接下來解決80端口問題, 思路就是80去調用8080,或者映射端口。

下面是影射方案,80 跳轉 8080


        
        
       
       
               
  1. iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
  2. 取消跳轉
  3. iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
  4. 查看規則
  5. iptables -t nat -L

另一個就是從80請求去調用8080的方案

這個方案可以在 Tomcat 前段增加反向代理,例如:Nginx,Apache,Squid,Varnish或者F5, Array這類設備等等

8.3 應用程序安全

關閉war自動部署 unpackWARs="false" autoDeploy="false"。防止被植入木馬等惡意程序

應用程序部署與tomcat啟動,不能使用同一個用戶。

我的tomcat 安裝在 /srv目錄下,Tomcat啟動用戶為daemon; 應用程序放在/www目錄下www所有者是www用戶。這樣的目的是一旦tomcat被植入web shell程序,它將不能創建或編輯/www目錄下面的任何內容。

adduser --home /www -c "Web Application" www
       
       
      
      
              

8.4 JSESSIONID

修改 Cookie 變量 JSESSIONID, 這個cookie 是用於維持Session關系。建議你改為PHPSESSID。





**********  第三部分 延伸閱讀 catalin.sh腳本分析   ***********


1、解釋startup.sh 和 catalin.sh 的區別

Linux下Tomcat啟動后顯示控制台:

采用 ./startup.sh 啟動,則沒有顯示控制台。

要像windows一樣顯示控制台,則 : ./catalina.sh run


2、(轉載)tomcat學習筆記之catalina.sh

原文鏈接: http://blog.csdn.net/jackie_xiaonan/article/details/49229139

本文基於tomcat 8.0.18版本的源碼實現寫作,隨tomcat7發布的腳本可能會有些差異。
最早是在07年部門培訓的時候接觸到tomcat,但后來的工作都和web開發不相關,所以沒有積累多少使用經驗,只有一點膚淺的感性認識;12年中項目組啟動了新部件的開發,使用tomcat做為運行平台,但和我的工作內容不相關,所以還沒有實質性的接觸;15年初,調離原項目,加入新產品的研發,而新產品是基於tomcat的j2ee項目,工作這么多年終於有機會和tomcat做一次親密接觸。

與catalina.sh相關的腳本

tomcat發布版本中附帶了很多腳本,和catalina.sh相關有如下

  • version.sh,查看當前tomcat的版本號。
  • startup.sh,啟動運行tomcat實例。
  • shutdown.sh,停止tomcat實例的運行。
  • configtest.sh,校驗tomcat配置文件server.xml的格式、內容等是否合法、正確。
  • setclasspath.sh,catalina.sh依賴這個腳本來設置一些運行時變量。

腳本version.sh、startup.sh、shutdown.sh、configtest.sh都是對catalina.sh的包裝,內容大同小異,差異在於功能介紹和調用catalina.sh時的參數不同。
下面就重點分析下catalina.sh的實現。

catalina.sh的命令行選項

在shell下不帶任何參數來執行catalina.sh,可以看到類似如下的輸出信息。

Usage: catalina ( commands ... )
commands:

   debug                      Start Catalina in a debugger

  debug -security   Debug Catalina with a security manager

  jpda start        Start Catalina under JPDA debugger

  run               Start Catalina in the current window

  run -security     Start in the current window with security manager

  start             Start Catalina in a separate window

  start -security   Start in a separate window with security manager

  stop              Stop Catalina, waiting up to 5 seconds for the process to end

  stop n            Stop Catalina, waiting up to n seconds for the process to end

  stop -force       Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running

  stop n -force     Stop Catalina, wait up to n seconds and then use kill -KILL if still running

  configtest        Run a basic syntax check on server.xml - check exit code for result

  version           What version of tomcat are you running?



幫助信息給出了各選項的意義,但tomcat提供的封裝腳本中只用到了其中的一部分,比如:

  • version,在version.sh中使用。
  • start,在startup.sh中使用。
  • stop,在shutdown.sh中使用。
  • configtest,在configtest.sh中使用。

如果需要使用其它命令行選項,最簡單的方法即是復制startup.sh腳本並重命名為新的腳本,使用文本編輯器調整傳給catalina.sh的參數,如此操作之后,滿足自定義需求的腳本即創建好了。

catalina.sh中使用的變量

catalina.sh提供了哪些變量?

用文本編輯器打開catalina.sh,首先可以看到一些環境變量的說明,基於功能可以做如下分類:

  • 指定tomcat和應用的啟動路徑
    • CATALINA_HOME,指向tomcat的安裝路徑,或者腳本catalina.sh所在位置的父目錄。
    • CATALINA_BASE,可選項,如無定義,則與CATALINA_HOME取值相同。用於指向用戶自定義的tomcat路徑,tomcat啟動時將以CATALINA_BASE變量值來計算配置文件、日志文件等的路徑。
  • Java運行時路徑,tomcat運行依賴系統已安裝好的Java運行時軟件,因此如下兩個變量中至少定義一個,並且變量值指向合法路徑。
    • JAVA_HOME,指定JDK的安裝路徑。
    • JRE_HOME,指定JRE的安裝路徑。取值原則,如用戶未指定JRE_HOME,則取JAVA_HOME的值;如JRE_HOME和JAVA_HOME都有定義,則優先取JRE_HOME的定義。
  • Java運行時參數
    • JAVA_OPTS,顧名思義,用來定義傳遞Java運行時的參數,對全部命令行選項都會生效,因此不建議在本變量中定義堆大小、GC參數、JMX參數等。
    • CATALINA_OPTS,用來定義傳遞給Java運行時的參數,僅在命令行選項為run/start/debug時有效,可以用來傳遞堆大小、GC參數、JMX參數等
    • CATALINA_TMPDIR,用來定義java.io.tmpdir變量的值,默認值為$CATALINA_BASE/temp。
    • JAVA_ENDORSED_DIRS,以分號相隔的目錄列表,用來替換非JCP提供的jar實現,默認值為$CATALINA_HOME/endorsed。
  • 遠程調試參數。當開發環境與應用運行環境不一致,或者開發環境下出於各種原因不適合調試應用時,這時即可借助遠程調試來解決問題。JPDA的介紹可參考閱讀資料。
    • JPDA_TRANSPORT,默認值dt_socket。
    • JPDA_ADDRESS,默認值localhost:8000。
    • JPDA_SUSPEND,默認值n
    • JPDA_OPTS,默認值為-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
  • 其它
    • CATALINA_OUT,使用全路徑方式指定stdout和stderr重定向之后的文件名,默認值為$CATALINA_BASE/logs/catalina.out。
    • CATALINA_PID,本選項在*nix下有效,指定pid文件的存儲路徑,默認值為空,如用戶指定,則啟動、停止時都會從變量指定的文件中提取進程ID。
    • LOGGING_CONFIG,定義tomcat使用的日志配置文件的路徑,默認值為$CATALINA_BASE/conf/logging.properties。
    • LOGGING_MANAGER,定義tomcat使用的日志管理器。

看過變量的定義之后,是否有定制變量取值的沖動了?

如何定義catalina.sh提供的變量?

  • 方法一,修改catalina.sh,在腳本的開始位置為前述變量賦值。
  • 方法二,提供自定義的啟動、停止腳本,在自定義的腳本中為前述變量賦值。
  • 方法三,使用tomcat開發人員預留的擴展方法,在$CATALINA_BASE/bin/setenv.sh中為前述變量賦值。

個人推薦方法二,升級tomcat版本時非常簡單,不需要從原tomcat安裝路徑下復制文件到升級后的tomcat的安裝路徑下。

catalina.sh的實現

catalina.sh規格接近600行代碼,這足以嚇退很多人,但如果肯硬着頭皮看幾遍的話,其實可以了解到catalina.sh的代碼並不復雜,可讀性還是很高的。
除去catalina.sh中對cygwin、os400的特殊處理,代碼做了如下操作:

  • 加載類路徑,通過加載、執行setclasspath.sh實現。
  • 加載用戶自定義變量,通過加載setenv.sh實現。
  • 校驗變量,包括前述介紹的變量,檢查是否存在定義,如無定義則使用默認值,並依據用途做相應的校驗。
  • 運行命令,依據腳本接收到的選項,將變量拼接為命令,並執行。

閱讀材料

  • JPDA是Java Platform Debugger Architecture的簡寫,詳盡的閱讀材料可參考http://docs.oracle.com/javase/8/docs/technotes/guides/jpda。

歡迎訪問Jackie的家,http://jackieathome.sinaapp.com/,如需轉載文章,請注明出處。



3、tomcat啟動腳本startup.sh分析

  原文地址:http://vekergu.blog.51cto.com/9966832/1621396

一、分析說明

為了寫出更加完善的tomcat啟動方面的自動化腳本,健壯自己用於代碼上線自動化部署的腳本,特分析下tomcat的bin目錄下的starup.sh腳本,學習標准的sh腳本的編寫方法,從中吸取經驗

二、腳本分析

#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
#
# $Id: startup.sh 1130937 2011-06-03 08:27:13Z markt $
# -----------------------------------------------------------------------------
# Better OS/400 detection: see Bugzilla 31132
os400=false
darwin=false
#os400是 IBM的AIX
#darwin是MacOSX 操作環境的操作系統成份
#Darwin是windows平台上運行的類UNIX模擬環境
case "`uname`" in
CYGWIN*) cygwin=true;;
OS400*) os400=true;;
Darwin*) darwin=true;;
esac
#上一個判斷是為了判斷操作系統,至於何用,往下看
# resolve links - $0 may be a softlink
#讀取腳本名
PRG="$0"
#test �h File 文件存在並且是一個符號鏈接(同-L)
while [ -h "$PRG" ] ; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done
#上面循環語句的意思是保證文件路徑不是一個連接,使用循環直至找到文件原地址
#遇到一時看不明白的shell,可以拆解后自己在linux反復運行驗證,一點點拆解就會明白的
#link=`expr "$ls" : '.*-> \(.*\)$'` 模擬后: expr 'lrwxrwxrwx 1 root root 19 3月  17 10:12 ./bbb.sh -> /root/shell/test.sh' : '.*-> \(.*\)$'
#很明確的發現是用expr來提取/root/shell/test.sh的內容
#而這個循環就可以明確其目的,排除命令為鏈接,找出命令真正的目錄,防止后面的命令出錯 
#這段代碼如果在以后有這方面的找出鏈接源頭的需求可以完全借鑒

#獲取這個腳本的目錄
PRGDIR=dirname <span class="string" style="color:#dd1144;">"<span class="variable">$PRG</span>"</span>
EXECUTABLE=catalina.sh
# Check that target executable exists
#這些判斷是否氣是其他的操作系統
if $os400; then
# -x will Only work on the os400 if the files are:
# 1. owned by the user
# 2. owned by the PRIMARY group of the user
# this will not work if the user belongs in secondary groups
eval
#這個eval還沒有理解
else
if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then
#判斷腳本catalina.sh是否存在並有可執行權限,沒有執行權限就退出
echo "Cannot find $PRGDIR/$EXECUTABLE"
echo "The file is absent or does not have execute permission"
echo "This file is needed to run this program"
exit 1
fi
fi
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
#exec命令在執行時會把當前的shell process關閉,然后換到后面的命令繼續執行。
#exec命令可以很好的進行腳本之間過渡,並且結束掉前一個腳本這樣不會對后面執行的腳本造成干擾。
#exec 命令:常用來替代當前 shell 並重新啟動一個 shell,換句話說,並沒有啟動子 shell。使用這一命令時任何現
#有環境都將會被清除。exec 在對文件描述符進行操作的時候,也只有在這時,exec 不會覆蓋你當前的 shell 環境。
#exec 可以用於腳本執行完啟動需要啟動另一個腳本是使用,但須考慮到環境變量是否被繼承。

三、總結

     tomcat的startup.sh腳本主要用來判斷環境,找到catalina.sh腳本源路徑,將啟動命令參數傳遞給catalina.sh執行。然而catalina.sh腳本中也涉及到判斷系統環境和找到catalina.sh腳本原路徑的相關代碼,所以執行tomcat啟動時,無需使用startup.sh腳本(下一篇分析的shutdown.sh也類似),直接./catalina.sh start|stop|restart 即可。

http://vekergu.blog.51cto.com/9966832/d-2


免責聲明!

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



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