_/etc/init.d
_で起動スクリプトを作成し、変数のexport
を実行すると、この変数は保持され、開始されたプロセスから「表示」できますか?
具体的には、Init.dでTomcatを起動するための次のスクリプトがあります。これは手動でstart
で開始します。
_#!/bin/bash
RETVAL=$?
export JRE_HOME=/home/jre
export PATH=/home/jre/bin/:${PATH}
export CATALINA_HOME=/home/Apache-Tomcat-7.0.25
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
/bin/su root $CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
/bin/su root $CATALINA_HOME/bin/shutdown.sh
fi
;;
restart)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
/bin/su root $CATALINA_HOME/bin/shutdown.sh
fi
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
/bin/su root $CATALINA_HOME/bin/startup.sh
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
_
現在Tomcatでは接続プールを使用しており、絶対URLを使用するとすべて正常に機能します。つまり:_url="jdbc:h2:file:/home/Apache-Tomcat-7.0.25/webapps/myDB;SCHEMA=mySchema"
_
しかし、相対URL、つまり_$CATALINA_HOME
_をURLで使用すると、つまり_url="jdbc:h2:file:$CATALINA_HOME\webapps\myDB;SCHEMA=mySchema"
_は機能せず、JNDI例外が発生します。
スクリプトで_$CATALINA_HOME
_を_/home/Apache-Tomcat-7.0.25
_にエクスポートしたことに注意してください
Tomcatの開始インスタンスに_$CATALINA_HOME
_が設定されていないようです。
これは本当でしょうか?環境変数を含むURLが機能しない理由を誰かが知っていますか?
新しいプロセスが作成されると、環境が親からコピーされます。したがって、別のプロセスを開始する前にスクリプトで設定した環境変数が存在する必要があります。
su/Sudo
のような一部のプログラムは、セキュリティ対策として、呼び出し方法に応じて環境のフィルタリングを行います。つまり、initスクリプトはsu
を呼び出しています。これは$CATALINA_HOME/bin/startup.sh
を開始しており、実際にはTomcastの起動を行っていると思います。何かが変数を削除または無視している可能性があります。
なぜinitスクリプト内からsu root
を使用して呼び出しているのだろうか。 initスクリプトはデフォルトでrootとして実行されるため、再度rootになる必要がある理由はありません。もし私があなただったら、su
への価値のない呼び出しと思われるものを削除します。
トラブルシューティングに役立てるためだけに。 rootとして、Linuxでは、/proc
をマウントすると、現在の環境が何であるかを確認できます。
たとえば、TomcatのプロセスIDが1234の場合、/proc/1234/environ
の内容を確認する必要があります。設定されているものはすべてそこにあるはずです。