web-dev-qa-db-ja.com

起動スクリプトで環境変数をエクスポートした場合、それは持続しますか?

_/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が機能しない理由を誰かが知っていますか?

3
Jim

新しいプロセスが作成されると、環境が親からコピーされます。したがって、別のプロセスを開始する前にスクリプトで設定した環境変数が存在する必要があります。

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の内容を確認する必要があります。設定されているものはすべてそこにあるはずです。

6
Zoredache