시작 스크립트에서 환경 변수를 내보내도 지속됩니까?


3

시작 스크립트를 만들 때 /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이 작동하지 않는 이유는 누구나 알 수 있습니까?

답변:


6

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

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

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

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

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


어, 그 의견은 이해가되지 않습니다.
Zoredache

신경 쓰지 마. 네가 맞아. 어쨌든 문제는 바람둥이가 conf 파일에 환경 소품을 받아들이지 않는다는거야.
Jim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.