我有以下问题:
我使用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启动后,我的webapp没有看到所需的环境变量。
我的问题是-我到底在做什么?有什么建议吗?如果setenv.sh不能工作,我应该如何将env传输到一个webapp?是什么让这个机制出了问题(据说这就是将env交给webapp的方式)?
下面是我写的启动脚本:
#!/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任何帮助都将不胜感激!(预先谢谢:)
发布于 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天的沮丧中继续前进:)
干杯!
发布于 2013-01-15 22:30:44
您应该使用系统属性,而不是环境变量。检查Tomcat的bin/daemon.sh脚本的源代码,它在启动时将所有标准变量传递给Tomcat。
https://stackoverflow.com/questions/14340240
复制相似问题