我有以下问题:
我正在使用 Tomcat 6.0.32 和 Java JDK 6.0_26。我已成功安装它,并且在浏览器的 8080 端口处可以看到 Tomcat 起始页。
我还创建了 $CATALINA_HOME/setenv.sh 脚本并在其中放入了一些特定于 webapp 的环境变量(以及 CATALINA_HOME、JAVA_HOME 和 CLASSPATH)。
我创建了一个新用户“tomcat”,为他设置了一个新的主目录,并对其进行了密码编辑。
该脚本来源于我创建的一个初始化脚本,用于在重新启动时自动启动和停止 Tomcat。我不使用 $CATALINA_HOME 中的标准 startup.sh 和 shutdown.sh,而是使用 jsvc 守护进程启动器,因此我可以使用非 root 进程(Tomcat 本身)的端口 8080。
实际的问题是,重新启动 Tomcat 后,我的 webapp 没有收到或看到我在 setenv.sh 中设置的环境变量,因此它不会启动。
我试图将环境变量定义放在不同的地方:
- .bashrc 在 tomcat 主目录中
- /etc/init.d/tomcat 脚本
- $CATALINA_HOME/bin/setenv.sh
- $CATALINA_HOME/webapps/myapp/META-INF/context.xml
无济于事,在启动 Tomcat 后,我的 webapp 看不到所需的环境变量。
我的问题是——我到底在做什么?有什么建议吗?如果 setenv.sh 不起作用,我应该如何将环境变量传输到 webapp?什么可能使这种机制出现故障(据称这是将 env vars 交给 webapps 的方式)?
这是我写的启动脚本:
#!/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
任何帮助将不胜感激!提前致谢 :)