시작 스크립트에서 환경 변수를 내보내도 지속됩니까? 시작 스크립트를 만들 때 /etc/init.d

시작 스크립트를 만들 때 /etc/init.d 하고 export 변수의 변수는이 변수를 유지하고 “볼 수”있습니다.
시작된 프로세스?
구체적으로는 initd에서 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_HOMEurl="jdbc:h2:file:$CATALINA_HOME\webapps\myDB;SCHEMA=mySchema" 이것은 작동하지 않으며 JNDI 예외가 발생합니다.
내 스크립트에서 내 보낸 것을 유의하십시오. $CATALINA_HOME 되려고 /home/apache-tomcat-7.0.25

그것은 마치 $CATALINA_HOME Tomcat의 시작된 인스턴스에 대해 설정되지 않았습니다.
이것이 사실 일 수 있습니까? 환경 변수가있는 URL이 작동하지 않는 이유는 누구나 알 수 있습니까?



답변

새로운 프로세스가 생성되면 환경은 부모로부터 복사됩니다. 따라서 다른 프로세스를 시작하기 전에 스크립트에 설정 한 환경 변수가 있어야합니다.

일부 프로그램은 su/sudo 보안 조치로서 호출 방법에 따라 환경 필터링을 수행합니다. 그래서 init 스크립트가 호출됩니다. su 시작하는 중이다. $CATALINA_HOME/bin/startup.sh, 나는 실제로 Tomcast 시작을하고 있다고 생각한다. 변수를 제거하거나 무시하는 중입니다.

내가 왜 전화를 사용하는지 궁금해. su root init 스크립트 내에서. 초기화 스크립트는 기본적으로 루트로 실행되므로 루트가되어야하는 이유가 없어야합니다. 내가 너라면, 쓸모없는 전화 인 것 같아. su.

문제를 해결하는 데 도움이됩니다. Linux에서는 루트 권한으로 /proc 마운트되어 있으면 현재 환경이 무엇인지 볼 수 있습니다.

예를 들어, tomcat이 1234의 프로세스 ID를 가지고 있다면, 다음과 같은 내용을 보길 원할 것입니다. /proc/1234/environ. 설정된 모든 항목이 있어야합니다.


답변