新貴腳本與命令行:為什麼會有這種行為差異?
我正在嘗試將 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。您對自己的目錄具有寫權限。所以一切都重新開始了。