Tomcat

新貴腳本與命令行:為什麼會有這種行為差異?

  • July 27, 2015

我正在嘗試將 Tomcat 設置為從暴發戶開始。我發現以下作品:

 description "Tomcat Server"

 start on runlevel [2345]
 stop on runlevel [!2345]
 respawn
 respawn limit 10 5

 setuid tomcat

 env JAVA_HOME=/usr/lib/jvm/default-java
 env CATALINA_HOME=/opt/apache-tomcat-7.0.34

 script
   chdir $CATALINA_HOME
   exec $CATALINA_HOME/bin/catalina.sh run
 end script

但是如果我刪除了,tomcat 會啟動,但是當我載入時chdir有很多FileNotFound例外。.wars(即:.wars它們本身確實載入,但它們在載入時拋出異常。)

請注意,此行為與我從命令行呼叫時看到的不同catalina.sh。從命令行呼叫,我可以/opt/apache-tomcat-7.0.34/bin/catalina.sh run 從任何目錄執行(沒有 chdiring),一切都很好。

那麼為什麼chdir在我的新貴腳本中有必要? (upstart 環境和我的命令行環境有什麼不同?)


當我不使用 chdir 時,我看到的錯誤範例:

Feb 22, 2013 3:00:11 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive my-war.war
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: my-war.log (Permission denied)
   at java.io.FileOutputStream.open(Native Method)

這是一個寫權限問題。不允許使用者 tomcat 在嘗試創建日誌文件的位置創建日誌文件。它嘗試在其中創建日誌文件的位置因您啟動 tomcat 的方式而異。

您日誌中的這篇文章引起了我的注意:

java.io.FileNotFoundException: my-war.log (Permission denied) at java.io.FileOutputStream.open(Native Method)

它說不允許使用者(tomcat)創建文件 my-war.log。以下是不同的場景:

新貴與 chdir

Upstart 第一個 chdirs 到 $CATALINA_HOME。允許使用者 tomcat 在那裡創建文件。所以一切正常。

沒有 chdir 的新貴

Upstart 以 root 身份執行,因此預設目錄為 /。不允許使用者 tomcat 在那裡創建文件。所以你會得到權限被拒絕的錯誤。

從你的主目錄執行 tomcat

現在你從你的主目錄以你自己的身份執行 tomcat。您對自己的目錄具有寫權限。所以一切都重新開始了。

引用自:https://serverfault.com/questions/479636