2016-12-13 77 views
-1

問題並不像標題中那樣容易。setenv.sh導致Tomcat7「失敗」開始

我在Unbutu 14.04 LTS上使用默認的Tomcat 7包。當我有沒有「setenv.sh」在/ usr /共享/ tomcat7/bin中,它開始說「OK」,當我做:

$ sudo service tomcat7 start 

* Starting Tomcat servlet engine tomcat7 [OK] 

當我使用下面介紹的setenv.sh,它也會啓動在/var/lib/logs/catalina.out中沒有錯誤,但當/etc/init.d/tomcat7調用「start-stop-daemon --test」並結束它沒有運行時,該服務被檢測爲「失敗」:

$ sudo service tomcat7 start 

* Starting Tomcat servlet engine tomcat7 [fail] 

我該怎麼辦?

/usr/share/tomcat7/bin/setenv.sh:

#! /bin/sh 
export JAVA_HOME="/home/linc/install/jdk1.7.0_75" 

(...)

# Check for application specific parameters at startup 
if [ -r "$CATALINA_BASE/bin/appenv.sh" ]; then 
. "$CATALINA_BASE/bin/appenv.sh" 
fi  

有一個其他的問題,也許相關:當我檢查過程在啓動後運行檢測爲「失敗」(ps -ef | grep java),我可以看到所有-D選項通過setenv.sh添加,但我看不到通過「appenv.sh」添加的-D選項(儘管setenv.sh和appenv .sh擁有完全相同的權利)。

注意:如果我啓動sudo /usr/share/tomcat7/bin/startup.sh,該setenv.sh不會引起任何問題,並且使用appenv.sh。

編輯:我可能找到了原因,但沒有解釋:當我刪除JAVA_HOME的聲明,它使用默認的jvm和服務啓動被檢測爲「OK」,但是當我指定默認的家jvm,它再次失敗!

export JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre" 

或:

export JAVA_HOME="/usr/lib/jvm/java-8-oracle" 

這到底是怎麼回事?

回答

0

以下是解釋。

閹羊的服務的命令的測試是向上或不excpects不僅一個PID也是一個精確的java二進制:

start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ 
          --user $TOMCAT7_USER --exec "$JAVA_HOME/bin/java" \ 
          >/dev/null; 

這是「catalina.sh」(和SETENV之前運行2次,一個。 sh)運行,之後。

ubuntu上的「標準」tomcat配置如下:/etc/init.d/tomcat7可以被/ etc/default/tomcat7覆蓋,catalina.sh可以覆蓋/etc/init.d/tomcat7(+ setenv.sh + appenv。 SH)。

所以有兩個不同的JAVA_HOME運行,第一個運行在/ etc/default/tomcat7或者一些自動檢測到的運行中,第二個運行在setenv.sh中。這使得啓動 - 停止 - 守護進程測試失敗。

解決方法是設置JAVA_HOME兩次,一次在/ etc/default/tomcat7中啓動服務,另一次在setenv.sh中,以防萬一需要直接啓動(通過shell中的startup.sh)測試目的,一些評論警告重複。

關於appenv.sh,原因是CATALINA_BASE ==只有CATLINA_HOME當你在命令行(startup.sh)啓動Tomcat。當運行Tomcat作爲服務CATALINA_BASE =在/ var/lib中/同時$ CATALINA_HOME =的/ usr /共享/ tomcat7 tomcat7。所以把setenv.sh(和appenv.sh)放在/ var/lib/tomcat7/bin /而不是/ usr/share/tomcat7/bin中解決了這個問題。