首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tomcat 6中的Webapp在启动后无法找到环境变量

Tomcat 6中的Webapp在启动后无法找到环境变量
EN

Stack Overflow用户
提问于 2013-01-15 14:49:22
回答 2查看 6.3K关注 0票数 2

我有以下问题:

我使用Tomcat6.0.32和Java 6.0_26。我已经成功地安装了它,在端口8080的浏览器中可以看到Tomcat的起始页面。

我还创建了$ CATALINA_HOME /setenv.sh脚本,并在其中添加了一些特定于webapp的环境变量(以及CATALINA_HOME、JAVA_HOME和CLASSPATH)。

我已经创建了一个新的用户"tomcat",为他设置了一个新的主目录,并对其进行了密码。

此脚本是从我创建的init脚本中获得的,用于在重新启动时自动启动和停止Tomcat。我不使用在startup.sh中找到的standart startup.sh和shutdown.sh,而是使用jsvc守护进程启动程序,因此我可以使用来自非根进程(Tomcat本身)的端口8080。

实际的问题是,在重启Tomcat之后,我的webapp没有接收或看到我在setenv.sh中设置的环境变量,因此它不会启动。

我尝试把环境变量的定义放在不同的地方:

  • tomcat主目录中的.bashrc
  • /etc/init.d/tomcat脚本
  • $CATALINA_HOME/bin/setenv.sh
  • $CATALINA_HOME/webapps/myapp/META-INF/context.xml

但没有效果,在Tomcat启动后,我的webapp没有看到所需的环境变量。

我的问题是-我到底在做什么?有什么建议吗?如果setenv.sh不能工作,我应该如何将env传输到一个webapp?是什么让这个机制出了问题(据说这就是将env交给webapp的方式)?

下面是我写的启动脚本:

代码语言:javascript
运行
复制
#!/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:

代码语言:javascript
运行
复制
# 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

任何帮助都将不胜感激!(预先谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-17 11:47:02

我找到了。据称原因是,起初我启动Tomcat 6作为root,然后将文件的所有权更改为用户"tomcat“。根进程通过适当的权限在整个文件系统中写入文件,即"tomcat“用户无法读取它们。

"tomct“用户的默认外壳是/bin/sh,而不是/bin/bash。

我还删除了$CATALINA_HOME/work中的文件,并重新命名了我的自定义env var所指向的目录(以及相应的env var )。

也有一些日志文件是从/ dicrectory中的log4j生成的,这些日志文件也不见了,现在一切都如预期的那样工作:)

谢谢你的反馈,你让我在这3天的沮丧中继续前进:)

干杯!

票数 1
EN

Stack Overflow用户

发布于 2013-01-15 22:30:44

您应该使用系统属性,而不是环境变量。检查Tomcat的bin/daemon.sh脚本的源代码,它在启动时将所有标准变量传递给Tomcat。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14340240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档