9

私の運用サーバーは、System V スタイルの init スクリプトを使用して Linux を実行しています。

service tomcat6 startTomcat は、root ユーザーとして実行することによって起動されます ( servicecwd の下で init スクリプトを実行します/)。

次に、Tomcat は Web ページを提供して の結果を書き込みnew File(".").getAbsolutePath()ます。/usr/share/tomcat6/.

しかし、Tomcat init script ( /etc/init.d/tomcat6) は CWD について言及しておらず、cdコマンドもありません。

Java 自体が現在の作業ディレクトリを変更できないことを考えると、/usr/share/tomcat6Tomcat の現在の作業ディレクトリになったのはなぜでしょうか? 起動プロセスのどこで cwd を変更しますか?

問題の Linux は CentOS6 です。

4

2 に答える 2

8

CentOS 6 では、Tomcat init.d スクリプトは次の行を使用して tomcat を起動します。

$SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start-security"

$SU は /bin/runuser または /bin/su のいずれかであり、$TOMCAT_USER は通常 "tomcat" であり、$TOMCAT_SCRIPT は通常 "/usr/sbin/tomcat6" です。「su -」または「runuser -」は、指定されたユーザーのホーム ディレクトリから、指定されたユーザーとしてそのコマンドを実行します。したがって、このコマンドは「tomcat」ユーザーの ID とホーム ディレクトリに変更し、/usr/sbin/tomcat6 を実行します。tomcat6 スクリプトは、最終的に tomcat 自体を起動します。

tomcat ユーザーのホーム ディレクトリは、CATALINA_BASE と同じにする必要があります。つまり、ここでの「su」または「runuser」コマンドは、現在の作業ディレクトリを CATALINA_BASE に設定するものです。

init.d スクリプトは正式には tomcat の一部ではありません。パッケージメンテナーによって提供され、システムごとに異なる場合があります。私のUbuntu 13システムでは、 $CATALINA_BASEへ/etc/init.d/tomcat6のコマンドが含まれています。cd

Tomcat 独自の起動スクリプト (bin/startup.sh など) は、作業ディレクトリを設定しません。独自の起動スクリプトを使用して tomcat 6 または tomcat 7 を直接起動すると、実行元の作業ディレクトリが継承されます。

Linux では、 をチェックすることで、プロセスの実際の現在のディレクトリを確認でき/proc/<pid>/cwdます。

于 2013-09-12T14:22:38.183 に答える
0

変数を見ましたか?

  • CATALINA_HOME: これは、Tomcat インストールのルートを表します。「この情報はファイルにあります」と言うとき、Tomcat インストールのルートにCATALINA_HOME/README.txtあるファイルを見ることを意味します。README.txt

  • CATALINA_BASEオプションで、各インスタンスに $CATALINA_BASE を定義することにより、Tomcat を複数のインスタンス用に構成できます。複数のインスタンスが構成されていない場合CATALINA_BASEは、 と同じCATALINA_HOMEです。

ファイルapache-tomcat-7.0.42/bin/catalina.shには次のように表示されます。

# Only set CATALINA_HOME if not already set
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
于 2013-09-12T02:09:58.003 に答える