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 при запуске.

Другие вопросы по тегам