我今天上class,发现tomcat6不会启动。 当试图停止并从下面的命令开始:
service tomcat6 stop ; > /var/log/tomcat6/catalina.out && service tomcat6 start && less +F /var/log/tomcat6/catalina.out
它报告返回OK启动tomcat,但使用ps ,没有显示tomcat进程。 catalina.out文件根本不显示任何内容,完全空白。 在查看/var/log/tomcat6/tomcat6-initd.log时,我发现每次尝试都会重复执行两行:
/usr/sbin/tomcat6: line 60: ${2}: ambiguous redirect /usr/sbin/tomcat6: line 30: ${2}: ambiguous redirect
看着/ usr / sbin / tomcat6,两行都是这样写的:
${JAVACMD} $JAVA_OPTS $CATALINA_OPTS \ -classpath "$CLASSPATH" \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ -Djava.util.logging.config.file="${CATALINA_BASE}/conf/logging.properties" \ -Djava.util.logging.manager="org.apache.juli.ClassLoaderLogManager" \ org.apache.catalina.startup.Bootstrap start \ >> ${2} 2>&1 &
第一行是60和30都是一样的。我的$JAVA_OPTS写的:
JAVA_OPTS="-server -Xss128K -Xms3G -Xmx3G -XX:MaxPermSize=256M -Dambiguous.url=https://ambiguous.url.com"
并且据我所知(不确定在哪里看,诚实地), $CATALINA_OPTS是空的,但我可能被误认为。 有一件事是肯定的,我没有调整它的价值,并且相信这个价值与模棱两可的redirect问题没有任何关系。
更新:通过更新我们的tomcat6包到最新版本,我现在不会收到上面看到的错误。 实际上,/ usr / sbin / tomcat6文件在前面指向的区域中读取的内容完全不同:
${JAVACMD} $JAVA_OPTS $CATALINA_OPTS \ -classpath "$CLASSPATH" \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ -Djava.util.logging.config.file="${CATALINA_BASE}/conf/logging.properties" \ -Djava.util.logging.manager="org.apache.juli.ClassLoaderLogManager" \ org.apache.catalina.startup.Bootstrap start \ >> ${CATALINA_BASE}/logs/catalina.out 2>&1 & if [ ! -z "$CATALINA_PID" ]; then echo $! > $CATALINA_PID fi
现在变得更加复杂了,因为tomcat6-initd.log根本没有任何报告,但是服务仍然没有启动。 使用-x运行init脚本将在启动时输出以下输出:
# service tomcat6 start + '[' -r /lib/lsb/init-functions ']' + . /lib/lsb/init-functions ++ lsb_release -i -s + DISTRIB_ID=Scientific ++ basename /etc/init.d/tomcat6 + NAME=tomcat6 + unset ISBOOT + '[' t = S -ot = K ']' + '[' -x /sbin/runuser ']' + SU='/sbin/runuser -s /bin/sh' + TOMCAT_CFG=/etc/tomcat6/tomcat6.conf + '[' -r /etc/tomcat6/tomcat6.conf ']' + . /etc/tomcat6/tomcat6.conf ++ CATALINA_BASE=/usr/share/tomcat6 ++ CATALINA_HOME=/usr/share/tomcat6 ++ JASPER_HOME=/usr/share/tomcat6 ++ CATALINA_TMPDIR=/var/cache/tomcat6/temp ++ JAVA_OPTS='-Xms3072m -Xmx3072m -Xss512m -XX:MaxPermSize=512m -server -Dambiguous.url=https://ambiguous.url.com' ++ TOMCAT_USER=root ++ SECURITY_MANAGER=false ++ SHUTDOWN_WAIT=30 ++ SHUTDOWN_VERBOSE=false ++ CATALINA_PID=/var/run/tomcat6.pid + '[' -r /etc/sysconfig/tomcat6 ']' + . /etc/sysconfig/tomcat6 + CONNECTOR_PORT=8080 + TOMCAT_SCRIPT=/usr/sbin/tomcat6 + TOMCAT_PROG=tomcat6 + TOMCAT_USER=root + TOMCAT_LOG=/var/log/tomcat6/tomcat6-initd.log + RETVAL=0 + RETVAL=0 + case "$1" in + start + echo -n 'Starting tomcat6: ' Starting tomcat6: + '[' 0 '!=' 0 ']' + '[' -f /var/lock/subsys/tomcat6 ']' + '[' -f /var/run/tomcat6.pid ']' + read kpid + '[' -d /proc/ ']' + log_success_msg + /etc/redhat-lsb/lsb_log_message success [ OK ] + '[' Scientific = MandrivaLinux ']' + RETVAL=0 + return + exit 0
如果我要在tomcat工作的单独服务器上运行完全相同的设置(有多个虚拟机作为群集运行),则输出如下所示:
# service tomcat6 start + '[' -r /lib/lsb/init-functions ']' + . /lib/lsb/init-functions ++ lsb_release -i -s + DISTRIB_ID=Scientific ++ basename /etc/init.d/tomcat6 + NAME=tomcat6 + unset ISBOOT + '[' t = S -ot = K ']' + '[' -x /sbin/runuser ']' + SU='/sbin/runuser -s /bin/sh' + TOMCAT_CFG=/etc/tomcat6/tomcat6.conf + '[' -r /etc/tomcat6/tomcat6.conf ']' + . /etc/tomcat6/tomcat6.conf ++ CATALINA_BASE=/usr/share/tomcat6 ++ CATALINA_HOME=/usr/share/tomcat6 ++ JASPER_HOME=/usr/share/tomcat6 ++ CATALINA_TMPDIR=/var/cache/tomcat6/temp ++ JAVA_OPTS='-Xms3072m -Xmx3072m -Xss512m -XX:MaxPermSize=512m -server -Dambiguous.url=https://ambiguous.url.com' ++ TOMCAT_USER=root ++ SECURITY_MANAGER=false ++ SHUTDOWN_WAIT=30 ++ SHUTDOWN_VERBOSE=false ++ CATALINA_PID=/var/run/tomcat6.pid + '[' -r /etc/sysconfig/tomcat6 ']' + . /etc/sysconfig/tomcat6 + CONNECTOR_PORT=8080 + TOMCAT_SCRIPT=/usr/sbin/tomcat6 + TOMCAT_PROG=tomcat6 + TOMCAT_USER=root + TOMCAT_LOG=/var/log/tomcat6/tomcat6-initd.log + RETVAL=0 + RETVAL=0 + case "$1" in + start + echo -n 'Starting tomcat6: ' Starting tomcat6: + '[' 0 '!=' 0 ']' + '[' -f /var/lock/subsys/tomcat6 ']' + export CATALINA_PID=/var/run/tomcat6.pid + CATALINA_PID=/var/run/tomcat6.pid + touch /var/run/tomcat6.pid + '[' 0 -eq 0 -a 0 -eq 0 ']' + chown root:root /var/run/tomcat6.pid + '[' 0 -eq 0 ']' + touch /var/log/tomcat6/tomcat6-initd.log + '[' 0 -eq 0 -a 0 -eq 0 ']' + chown root:root /var/log/tomcat6/tomcat6-initd.log + parseOptions + options= ++ awk '!/^#/ && !/^$/ { ORS=" "; print "export ", $0, ";" }' /etc/tomcat6/tomcat6.conf + options=' export CATALINA_BASE="/usr/share/tomcat6" ; export CATALINA_HOME="/usr/share/tomcat6" ; export JASPER_HOME="/usr/share/tomcat6" ; export CATALINA_TMPDIR="/var/cache/tomcat6/temp" ; export JAVA_OPTS="-Xms3072m -Xmx3072m -Xss512m -XX:MaxPermSize=512m -server -Dambiguous.url=https://ambiguous.url.com" ; export TOMCAT_USER="root" ; export SECURITY_MANAGER="false" ; export SHUTDOWN_WAIT="30" ; export SHUTDOWN_VERBOSE="false" ; export CATALINA_PID="/var/run/tomcat6.pid" ; ' + '[' -r /etc/sysconfig/tomcat6 ']' ++ awk '!/^#/ && !/^$/ { ORS=" "; print "export ", $0, ";" }' /etc/sysconfig/tomcat6 + options=' export CATALINA_BASE="/usr/share/tomcat6" ; export CATALINA_HOME="/usr/share/tomcat6" ; export JASPER_HOME="/usr/share/tomcat6" ; export CATALINA_TMPDIR="/var/cache/tomcat6/temp" ; export JAVA_OPTS="-Xms3072m -Xmx3072m -Xss512m -XX:MaxPermSize=512m -server -Dambiguous.url=https://ambiguous.url.com" ; export TOMCAT_USER="root" ; export SECURITY_MANAGER="false" ; export SHUTDOWN_WAIT="30" ; export SHUTDOWN_VERBOSE="false" ; export CATALINA_PID="/var/run/tomcat6.pid" ; ' + TOMCAT_SCRIPT=' export CATALINA_BASE="/usr/share/tomcat6" ; export CATALINA_HOME="/usr/share/tomcat6" ; export JASPER_HOME="/usr/share/tomcat6" ; export CATALINA_TMPDIR="/var/cache/tomcat6/temp" ; export JAVA_OPTS="-Xms3072m -Xmx3072m -Xss512m -XX:MaxPermSize=512m -server -Dambiguous.url=https://ambiguous.url.com" ; export TOMCAT_USER="root" ; export SECURITY_MANAGER="false" ; export SHUTDOWN_WAIT="30" ; export SHUTDOWN_VERBOSE="false" ; export CATALINA_PID="/var/run/tomcat6.pid" ; /usr/sbin/tomcat6' + '[' 0 -eq 0 -a false = true ']' + '[' 0 -eq 0 ']' + /sbin/runuser -s /bin/sh - root -c ' export CATALINA_BASE="/usr/share/tomcat6" ; export CATALINA_HOME="/usr/share/tomcat6" ; export JASPER_HOME="/usr/share/tomcat6" ; export CATALINA_TMPDIR="/var/cache/tomcat6/temp" ; export JAVA_OPTS="-Xms3072m -Xmx3072m -Xss512m -XX:MaxPermSize=512m -server -Dambiguous.url=https://ambiguous.url.com" ; export TOMCAT_USER="root" ; export SECURITY_MANAGER="false" ; export SHUTDOWN_WAIT="30" ; export SHUTDOWN_VERBOSE="false" ; export CATALINA_PID="/var/run/tomcat6.pid" ; /usr/sbin/tomcat6 start' + '[' 0 -eq 0 ']' + log_success_msg + /etc/redhat-lsb/lsb_log_message success [ OK ] + touch /var/lock/subsys/tomcat6 + '[' Scientific = MandrivaLinux ']' + exit 0
只要彻底,/ /etc/init.d/tomcat6的start()函数如下所示:
function start() { echo -n "Starting ${TOMCAT_PROG}: " if [ "$RETVAL" != "0" ]; then log_failure_msg return fi if [ -f "/var/lock/subsys/${NAME}" ]; then if [ -f "/var/run/${NAME}.pid" ]; then read kpid < /var/run/${NAME}.pid # if checkpid $kpid 2>&1; then if [ -d "/proc/${kpid}" ]; then log_success_msg if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then echo fi RETVAL="0" return fi fi fi # fix permissions on the log and pid files export CATALINA_PID="/var/run/${NAME}.pid" touch $CATALINA_PID 2>&1 || RETVAL="4" if [ "$RETVAL" -eq "0" -a "$?" -eq "0" ]; then chown ${TOMCAT_USER}:${TOMCAT_USER} $CATALINA_PID fi [ "$RETVAL" -eq "0" ] && touch $TOMCAT_LOG 2>&1 || RETVAL="4" if [ "$RETVAL" -eq "0" -a "$?" -eq "0" ]; then chown ${TOMCAT_USER}:${TOMCAT_USER} $TOMCAT_LOG fi parseOptions if [ "$RETVAL" -eq "0" -a "$SECURITY_MANAGER" = "true" ]; then $SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start-security" \ >> ${TOMCAT_LOG} 2>&1 || RETVAL="4" else [ "$RETVAL" -eq "0" ] && $SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start" >> ${TOMCAT_LOG} 2>&1 || RETVAL="4" fi if [ "$RETVAL" -eq "0" ]; then log_success_msg touch /var/lock/subsys/${NAME} else log_failure_msg "Error code ${RETVAL}" fi if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then echo fi }
键入reboot到控制台,用相当大的力量用我的额头捣碎input键,问题就消失了。