Webapp в Tomcat 6 не может найти переменные окружения после запуска
У меня есть следующая проблема:
Я использую Tomcat 6.0.32 и Java JDK 6.0_26. Я успешно установил его, и стартовая страница Tomcat видна в браузере через порт 8080.
Я также создал сценарий $CATALINA_HOME/setenv.sh и поместил в него некоторые переменные среды, специфичные для веб-приложений (вместе с CATALINA_HOME, JAVA_HOME и CLASSPATH).
Я создал нового пользователя "tomcat", установил для него новый домашний каталог, а также передал его.
Этот сценарий создается из сценария инициализации, который я создал для автоматического запуска и остановки Tomcat при перезагрузке. Я не использую standart startup.sh и shutdown.sh, находящиеся в $CATALINA_HOME, а скорее jsvc daemon starter, поэтому я могу использовать порт 8080 от некорневого процесса (сам Tomcat).
Фактическая проблема заключается в том, что после перезапуска Tomcat мое веб-приложение не получает или не видит переменную среды, которую я установил в setenv.sh, и поэтому он не запустится.
Я попытался поместить определение переменной среды в различных местах:
- .bashrc в домашнем каталоге tomcat
- /etc/init.d/tomcat script
- $ CATALINA_HOME / бен / setenv.sh
- $ CATALINA_HOME / WebApps/ MyApp/META-INF/context.xml
безрезультатно, после запуска Tomcat мое веб-приложение не видит необходимые переменные среды.
Мой вопрос - какого чёрта я делаю? Любые suggsetions? Как я должен перенести env vars в веб-приложение, если setenv.sh не работает? Что может сделать этот механизм неисправным (якобы, это способ передачи переменных в веб-приложения)?
Вот сценарий запуска, который я написал:
#!/bin/sh
### BEGIN INIT INFO
# Provides: allfaweb
# Required-Start: $syslog $apache $apache2 $httpd
# Should-Start:
# Required-Stop: $syslog $apache $apache2 $httpd
# Should-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: ALLFAweb service
### END INIT INFO
ALLFAWEB_BIN=/install/apache-tomcat-6.0.32-allfaweb/bin/jsvc
test -x $ALLFAWEB_BIN || { echo "$ALLFAWEB_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
# Check for existence of setenv.sh file and read it
ALLFAWEB_CONFIG=/install/apache-tomcat-6.0.32-allfaweb/bin/setenv.sh
test -r $ALLFAWEB_CONFIG || { echo "$ALLFAWEB_CONFIG not existing";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }
. /etc/rc.status
rc_reset
. /install/apache-tomcat-6.0.32-allfaweb/bin/setenv.sh;
case "$1" in
start)
echo -n "Starting ALLFAweb ";
$ALLFAWEB_BIN \
-user tomcat \
-home $JAVA_HOME \
-Dcatalina.home=$CATALINA_HOME \
-pidfile $ALLFAWEB_PID \
-outfile $CATALINA_HOME/logs/catalina.out \
-errfile $CATALINA_HOME/logs/catalina.err \
-cp $CLASSPATH org.apache.catalina.startup.Bootstrap
rc_status -v
;;
stop)
echo -n "Shutting down ALLFAweb "
$ALLFAWEB_BIN \
-stop \
-pidfile $ALLFAWEB_PID \
org.apache.catalina.startup.Bootstrap
rc_status -v
;;
restart)
$0 stop
$0 start
rc_status
;;
status)
echo -n "Checking for service ALLFAweb ";
/sbin/checkproc $ALLFAWEB_BIN
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
rc_exit
Я использую систему SUSE SP2:
# uname -a
Linux testmachine 3.0.51-0.7.9-default #1 SMP Thu Nov 29 22:12:17 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Любая помощь будет высоко оценен! Заранее спасибо:)
2 ответа
Я нашел это. Предположительно, причина в том, что сначала я запустил Tomcat 6 от имени пользователя root, а затем сменил владельца файлов на пользователя "tomcat". Корневой процесс записывал файлы по всей файловой системе с соответствующими разрешениями, то есть пользователь "tomcat" не мог их прочитать.
Оболочкой по умолчанию для пользователя "tomct" была /bin/sh, а не /bin/bash
Я также удалил файлы в $CATALINA_HOME/work и переименовал каталог, на который указывал мой пользовательский env var (и соответственно env var).
В / dicrectory были также сгенерированы некоторые log-файлы из log4j, они тоже пропали, и теперь все работает как положено:)
Спасибо за все отзывы, вы поддерживали меня в течение этих 3 дней разочарования:)
Ура!
Вы должны использовать системные свойства, а не переменные среды. Проверьте исходный код сценария Tomcat bin / daemon.sh, который передает все стандартные переменные в Tomcat при запуске.