1

次の問題があります。

Tomcat 6.0.32 と Java JDK 6.0_26 を使用しています。正常にインストールされ、Tomcat の開始ページがポート 8080 のブラウザーに表示されます。

また、$CATALINA_HOME/setenv.sh スクリプトを作成し、いくつかの webapp 固有の環境変数を (CATALINA_HOME、JAVA_HOME、および CLASSPATH と共に) その中に入れました。

新しいユーザー「tomcat」を作成し、彼の新しいホームディレクトリを設定し、passwd-ed しました。

このスクリプトは、再起動時に Tomcat を自動的に起動および停止するために作成した init スクリプト内から供給されています。$CATALINA_HOME にある標準的な startup.sh と shutdown.sh は使用せず、jsvc デーモン スターターを使用するので、非ルート プロセス (Tomcat 自体) からポート 8080 を使用できます。

実際の問題は、Tomcat を再起動した後、webapp が setenv.sh で設定した環境変数を受信または表示しないため、起動しないことです。

環境変数の定義をさまざまな場所に配置しようとしました。

  • tomcat ホーム ディレクトリの .bashrc
  • /etc/init.d/tomcat スクリプト
  • $CATALINA_HOME/bin/setenv.sh
  • $CATALINA_HOME/webapps/myapp/META-INF/context.xml

Tomcat の起動後、Web アプリケーションに必要な環境変数が表示されません。

私の質問は - 私は一体何をしているのですか?何か提案はありますか?setenv.sh が機能しない場合、環境変数を webapp に転送するにはどうすればよいですか? このメカニズムに問題があるのはなぜですか (これは、環境変数を webapps に渡す方法だとされています)

これが私が書いた起動スクリプトです:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          allfaweb
# Required-Start:    $syslog $apache $apache2 $httpd
# Should-Start:
# Required-Stop:     $syslog $apache $apache2 $httpd
# Should-Stop:
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: ALLFAweb service
### END INIT INFO

ALLFAWEB_BIN=/install/apache-tomcat-6.0.32-allfaweb/bin/jsvc
test -x $ALLFAWEB_BIN || { echo "$ALLFAWEB_BIN not installed";
        if [ "$1" = "stop" ]; then exit 0;
        else exit 5; fi; }

# Check for existence of setenv.sh file and read it
ALLFAWEB_CONFIG=/install/apache-tomcat-6.0.32-allfaweb/bin/setenv.sh
test -r $ALLFAWEB_CONFIG || { echo "$ALLFAWEB_CONFIG not existing";
        if [ "$1" = "stop" ]; then exit 0;
        else exit 6; fi; }


. /etc/rc.status
rc_reset

. /install/apache-tomcat-6.0.32-allfaweb/bin/setenv.sh;


case "$1" in
    start)
        echo -n "Starting ALLFAweb ";
        $ALLFAWEB_BIN \
           -user tomcat \
           -home $JAVA_HOME \
           -Dcatalina.home=$CATALINA_HOME \
           -pidfile $ALLFAWEB_PID \
           -outfile $CATALINA_HOME/logs/catalina.out \
           -errfile $CATALINA_HOME/logs/catalina.err \
           -cp $CLASSPATH org.apache.catalina.startup.Bootstrap

        rc_status -v
        ;;
    stop)
        echo -n "Shutting down ALLFAweb "
        $ALLFAWEB_BIN \
            -stop \
            -pidfile $ALLFAWEB_PID \
            org.apache.catalina.startup.Bootstrap

        rc_status -v
        ;;
    restart)
        $0 stop
        $0 start
        rc_status
        ;;
    status)
        echo -n "Checking for service ALLFAweb ";
        /sbin/checkproc $ALLFAWEB_BIN
        rc_status -v
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac
rc_exit

私が使用しているシステムは SUSE SP2 です。

# uname -a
Linux testmachine 3.0.51-0.7.9-default #1 SMP Thu Nov 29 22:12:17 UTC 2012  x86_64 x86_64 x86_64 GNU/Linux

どんな助けでも大歓迎です!前もって感謝します :)

4

2 に答える 2

1

見つけた。その理由は、最初にTomcat 6をルートとして起動し、ファイルの所有権をユーザー「tomcat」に変更したためだとされています。root プロセスは、適切なパーミッションでファイル システム全体にファイルを書き込みました。つまり、「tomcat」ユーザーはそれらを読み取ることができませんでした。

「tomct」ユーザーのデフォルトのシェルは /bin/sh であり、/bin/bash ではありませんでした

$CATALINA_HOME/work 内のファイルも削除し、カスタム環境変数が指しているディレクトリの名前を変更しました (それに応じて環境変数も)。

/ディレクトリにはlog4jから生成されたログファイルもいくつかありましたが、それらもなくなり、すべてが期待どおりに機能するようになりました:)

すべてのフィードバックに感謝します。この 3 日間のフラストレーションの間、あなたは私を前進させてくれました :)

乾杯!

于 2013-01-17T11:47:02.587 に答える
1

環境変数ではなく、システム プロパティを使用する必要があります。Tomcat のbin/daemon.shスクリプトのソースを確認してください。このスクリプトは、Tomcat の起動時にすべての標準変数を Tomcat に渡します。

于 2013-01-15T22:30:44.227 に答える