Bug#624431: Starting tomcat6 with the init.d script does not succeed, manual start does work. Environment variables are not taken.

Rainer Stumbaum stumbaumr at yahoo.de
Thu Apr 28 12:49:08 UTC 2011


Package: tomcat6
Version: 6.0.28-9+squeeze1
Severity: important

Hi,
we run a readonly /usr filesystem and there a tomcat6 standard installation.
The init.d startup script fails to start the tomcat6.
There is no log output

We changed the set -e to set -ex and get the following output:

+ echo start-stop-daemon --start -b -u tomcat6 -g tomcat6             -c tomcat6 -d /tmp/tomcat6-tmp -p /var/run/tomcat6.pid             -x /bin/bash -- -c  set -a; JAVA_HOME="/usr/lib/jvm/java-6-sun"; source "/etc/default/tomcat6"; CATALINA_HOME="/usr/share/tomcat6"; CATALINA_BASE="/var/lib/tomcat6"; JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC"; CATALINA_PID="/var/run/tomcat6.pid"; CATALINA_TMPDIR="/tmp/tomcat6-tmp"; LANG="en_US.UTF-8"; JSSE_HOME="/usr/lib/jvm/java-6-sun/jre/"; cd "/var/lib/tomcat6"; "/usr/share/tomcat6/bin/catalina.sh" start
+ start-stop-daemon --start -b -u tomcat6 -g tomcat6 -c tomcat6 -d /tmp/tomcat6-tmp -p /var/run/tomcat6.pid -x /bin/bash -- -c  set -a; JAVA_HOME="/usr/lib/jvm/java-6-sun"; source "/etc/default/tomcat6";             CATALINA_HOME="/usr/share/tomcat6";          CATALINA_BASE="/var/lib/tomcat6";               JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC";          CATALINA_PID="/var/run/tomcat6.pid";            CATALINA_TMPDIR="/tmp/tomcat6-tmp"; LANG="en_US.UTF-8"; JSSE_HOME="/usr/lib/jvm/java-6-sun/jre/";            cd "/var/lib/tomcat6";          "/usr/share/tomcat6/bin/catalina.sh" start
+ status=0
+ set +a -e
+ return 0
+ sleep 5
+ start-stop-daemon --test --start --pidfile /var/run/tomcat6.pid --user tomcat6 --exec /usr/lib/jvm/java-6-sun/bin/java
+ [ -f /var/run/tomcat6.pid ]
+ rm -f /var/run/tomcat6.pid
+ log_end_msg 1

Running the start-stop-daemon manually works, but the set environment variables are not taken over:

root at lucene01.dc1:~# start-stop-daemon --start -b -u tomcat6 -g tomcat6 -c tomcat6 -d /tmp/tomcat6-tmp -p /var/run/tomcat6.pid -x /bin/bash -- -c  set -a; JAVA_HOME="/usr/lib/jvm/java-6-sun"; source "/etc/default/tomcat6";             CATALINA_HOME="/usr/share/tomcat6";          CATALINA_BASE="/var/lib/tomcat6";               JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC";          CATALINA_PID="/var/run/tomcat6.pid";            CATALINA_TMPDIR="/tmp/tomcat6-tmp"; LANG="en_US.UTF-8"; JSSE_HOME="/usr/lib/jvm/java-6-sun/jre/";            cd "/var/lib/tomcat6";          "/usr/share/tomcat6/bin/catalina.sh" start
Using CATALINA_BASE:   /usr/share/tomcat6
Using CATALINA_HOME:   /usr/share/tomcat6
Using CATALINA_TMPDIR: /usr/share/tomcat6/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat6/bin/bootstrap.jar
root at lucene01.dc1:/var/lib/tomcat6#

Best regards
Rainer

-- System Information:
Debian Release: 6.0.1
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages tomcat6 depends on:
ii  adduser                3.112+nmu2        add and remove users and groups
ii  debconf [debconf-2.0]  1.5.36.1          Debian configuration management sy
ii  tomcat6-common         6.0.28-9+squeeze1 Servlet and JSP engine -- common f
ii  ucf                    3.0025+nmu1       Update Configuration File: preserv

Versions of packages tomcat6 recommends:
ii  authbind                      1.2.0      Allows non-root programs to bind()

Versions of packages tomcat6 suggests:
pn  tomcat-native                 <none>     (no description available)
pn  tomcat6-admin                 <none>     (no description available)
pn  tomcat6-docs                  <none>     (no description available)
pn  tomcat6-examples              <none>     (no description available)
pn  tomcat6-user                  <none>     (no description available)

-- Configuration Files:
/etc/init.d/tomcat6 changed:
set -ex
PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=tomcat6
DESC="Tomcat servlet engine"
DEFAULT=/etc/default/$NAME
JVM_TMP=/tmp/tomcat6-tmp
if [ `id -u` -ne 0 ]; then
        echo "You need root privileges to run this script"
        exit 1
fi

if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG
fi
. /lib/lsb/init-functions
if [ -r /etc/default/rcS ]; then
        . /etc/default/rcS
fi
TOMCAT6_USER=tomcat6
TOMCAT6_GROUP=tomcat6
JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done
export JAVA_HOME
CATALINA_HOME=/usr/share/$NAME
CATALINA_BASE=/var/lib/$NAME
TOMCAT6_SECURITY=no
if [ -z "$JAVA_OPTS" ]; then
        JAVA_OPTS="-Djava.awt.headless=true -Xmx128M"
fi
if [ -f "$DEFAULT" ]; then
        . "$DEFAULT"
fi
if [ ! -f "$CATALINA_HOME/bin/bootstrap.jar" ]; then
        log_failure_msg "$NAME is not installed"
        exit 1
fi
POLICY_CACHE="$CATALINA_BASE/work/catalina.policy"
if [ -z "$CATALINA_TMPDIR" ]; then
        CATALINA_TMPDIR="$JVM_TMP"
fi
if [ -n "$JSP_COMPILER" ]; then
        JAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=\"$JSP_COMPILER\""
fi
SECURITY=""
if [ "$TOMCAT6_SECURITY" = "yes" ]; then
        SECURITY="-security"
fi
CATALINA_PID="/var/run/$NAME.pid"
CATALINA_SH="$CATALINA_HOME/bin/catalina.sh"
if [ -z "${JSSE_HOME}" -a -r "${JAVA_HOME}/jre/lib/jsse.jar" ]; then
    JSSE_HOME="${JAVA_HOME}/jre/"
fi
catalina_sh() {
        # Escape any double quotes in the value of JAVA_OPTS
        JAVA_OPTS="$(echo $JAVA_OPTS | sed 's/\"/\\\"/g')"
        AUTHBIND_COMMAND=""
        if [ "$AUTHBIND" = "yes" -a "$1" = "start" ]; then
                JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
                AUTHBIND_COMMAND="/usr/bin/authbind --deep /bin/bash -c "
        fi
        # Define the command to run Tomcat's catalina.sh as a daemon
        # set -a tells sh to export assigned variables to spawned shells.
        TOMCAT_SH="set -a; JAVA_HOME=\"$JAVA_HOME\"; source \"$DEFAULT\"; \
                CATALINA_HOME=\"$CATALINA_HOME\"; \
                CATALINA_BASE=\"$CATALINA_BASE\"; \
                JAVA_OPTS=\"$JAVA_OPTS\"; \
                CATALINA_PID=\"$CATALINA_PID\"; \
                CATALINA_TMPDIR=\"$CATALINA_TMPDIR\"; \
                LANG=\"$LANG\"; JSSE_HOME=\"$JSSE_HOME\"; \
                cd \"$CATALINA_BASE\"; \
                \"$CATALINA_SH\" $@"
        if [ "$AUTHBIND" = "yes" -a "$1" = "start" ]; then
                TOMCAT_SH="'$TOMCAT_SH'"
        fi
        # Run the catalina.sh script as a daemon
        set +e
        touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
        chown $TOMCAT6_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
        echo "start-stop-daemon --start -b -u "$TOMCAT6_USER" -g "$TOMCAT6_GROUP" \
            -c "$TOMCAT6_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \
            -x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH" ">>"$CATALINA_BASE"/logs/catalina.out
        start-stop-daemon --start -b -u "$TOMCAT6_USER" -g "$TOMCAT6_GROUP" \
                -c "$TOMCAT6_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \
                -x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
        status="$?"
        set +a -e
        return $status
}
case "$1" in
  start)
        if [ -z "$JAVA_HOME" ]; then
                log_failure_msg "no JDK found - please set JAVA_HOME"
                exit 1
        fi
        if [ ! -d "$CATALINA_BASE/conf" ]; then
                log_failure_msg "invalid CATALINA_BASE: $CATALINA_BASE"
                exit 1
        fi
        log_daemon_msg "Starting $DESC" "$NAME"
        if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                --user $TOMCAT6_USER --exec "$JAVA_HOME/bin/java" \
                >/dev/null; then
                # Regenerate POLICY_CACHE file
                umask 022
                echo "// AUTO-GENERATED FILE from /etc/tomcat6/policy.d/" \
                        > "$POLICY_CACHE"
                echo ""  >> "$POLICY_CACHE"
                cat $CATALINA_BASE/conf/policy.d/*.policy \
                        >> "$POLICY_CACHE"
                # Remove / recreate JVM_TMP directory
                rm -rf "$JVM_TMP"
                mkdir -p "$JVM_TMP" || {
                        log_failure_msg "could not create JVM temporary directory"
                        exit 1
                }
                chown $TOMCAT6_USER "$JVM_TMP"
                catalina_sh start $SECURITY
                sleep 5
                if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                        --user $TOMCAT6_USER --exec "$JAVA_HOME/bin/java" \
                        >/dev/null; then
                        if [ -f "$CATALINA_PID" ]; then
                                rm -f "$CATALINA_PID"
                        fi
                        log_end_msg 1
                else
                        log_end_msg 0
                fi
        else
                log_progress_msg "(already running)"
                log_end_msg 0
        fi
        ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        set +e
        if [ -f "$CATALINA_PID" ]; then
                start-stop-daemon --stop --pidfile "$CATALINA_PID" \
                        --user "$TOMCAT6_USER" \
                        --retry=TERM/20/KILL/5 >/dev/null
                if [ $? -eq 1 ]; then
                        log_progress_msg "$DESC is not running but pid file exists, cleaning up"
                elif [ $? -eq 3 ]; then
                        PID="`cat $CATALINA_PID`"
                        log_failure_msg "Failed to stop $NAME (pid $PID)"
                        exit 1
                fi
                rm -f "$CATALINA_PID"
                rm -rf "$JVM_TMP"
        else
                log_progress_msg "(not running)"
        fi
        log_end_msg 0
        set -e
        ;;
   status)
        set +e
        start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                --user $TOMCAT6_USER --exec "$JAVA_HOME/bin/java" \
                >/dev/null 2>&1
        if [ "$?" = "0" ]; then
                if [ -f "$CATALINA_PID" ]; then
                    log_success_msg "$DESC is not running, but pid file exists."
                        exit 1
                else
                    log_success_msg "$DESC is not running."
                        exit 3
                fi
        else
                log_success_msg "$DESC is running with pid `cat $CATALINA_PID`"
        fi
        set -e
        ;;
  restart|force-reload)
        if [ -f "$CATALINA_PID" ]; then
                $0 stop
                sleep 1
        fi
        $0 start
        ;;
  try-restart)
        if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                --user $TOMCAT6_USER --exec "$JAVA_HOME/bin/java" \
                >/dev/null; then
                $0 start
        fi
        ;;
  *)
        log_success_msg "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"
        exit 1
        ;;
esac
exit 0

/etc/tomcat6/tomcat-users.xml changed:
<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
      http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<tomcat-users>
<!--
  NOTE:  By default, no user is included in the "manager" role required
  to operate the "/manager" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary.
-->
<!--
  NOTE:  The sample user and role entries below are wrapped in a comment
  and thus are ignored when reading this file. Do not forget to remove
  <!.. ..> that surrounds them.
-->
  <role rolename="admin"/>
  <role rolename="manager"/>
  <user username="tomcat" password="tomcat" roles="admin,manager"/>
</tomcat-users>


-- debconf information:
  tomcat6/javaopts: -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC
  tomcat6/groupname: tomcat6
  tomcat6/username: tomcat6






More information about the pkg-java-maintainers mailing list