시작 스크립트를 만들 때 /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_HOME
즉 url="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
. 설정된 모든 항목이 있어야합니다.