Debugging environment:
Ubuntu: 11.10
Tomcat: 7.0.14
JDK: 1.6.0 -- 20
Shell> tar zxvf apache-tomcat-7.0.14.tar.gz
Shell> sudo groupadd Tomcat
Shell> sudo useradd-S/usr/sbin/nologin-r-g Tomcat
Shell> sudo CP-r APACHE-Tomcat-7.0.14/usr/local
Shell> Cd/usr/local
Shell> sudo ln-s APACHE-Tomcat-7.0.14 Tomcat
Shell> sudo chown-r Tomcat: Tomcat APACHE-Tomcat-7.0.14
Shell> sudo chown-r tomcattomcat Tomcat
Copy the script to/etc/init. d and name it Tomcat
#!/bin/sh## /etc/init.d/tomcat -- startup script for the Tomcat servlet engine## Written by Miquel van Smoorenburg <miquels@cistron.nl>.# Modified for Debian GNU/Linuxby Ian Murdock <imurdock@gnu.ai.mit.edu>.# Modified for Tomcat by Stefan Gybas <sgybas@debian.org>.# Modified for tomcat by Thierry Carrez <thierry.carrez@ubuntu.com>.# Additional improvements by Jason Brittain <jason.brittain@mulesoft.com>.#### BEGIN INIT INFO# Provides: tomcat# Required-Start: $local_fs $remote_fs $network# Required-Stop: $local_fs $remote_fs $network# Should-Start: $named# Should-Stop: $named# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Start Tomcat.# Description: Start the Tomcat servlet engine.### END INIT INFOset -ePATH=/bin:/usr/bin:/sbin:/usr/sbinNAME=tomcatDESC="Tomcat servlet engine"DEFAULT=/etc/default/$NAMEJVM_TMP=/tmp/tomcat-tmpif [ `id -u` -ne 0 ]; thenecho "You need root privileges to run this script"exit 1fi # Make sure tomcat is started with system localeif [ -r /etc/default/locale ]; then. /etc/default/localeexport LANGfi. /lib/lsb/init-functionsif [ -r /etc/default/rcS ]; then. /etc/default/rcSfi# The following variables can be overwritten in $DEFAULT# Run Tomcat as this user ID and group IDtomcat_USER=tomcattomcat_GROUP=tomcat# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not# defined in $DEFAULT)JDK_DIRS="/usr/local/jvm/java /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"# Look for the right JVM to usefor jdir in $JDK_DIRS; do if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; thenJAVA_HOME="$jdir" fidoneexport JAVA_HOME# Directory where the Tomcat binary distribution residesCATALINA_HOME=/usr/local/$NAME# Directory for per-instance configuration files and webappsCATALINA_BASE=/usr/local/$NAME# Use the Java security manager? (yes/no)tomcat_SECURITY=no# Default Java options# Set java.awt.headless=true if JAVA_OPTS is not set so the# Xalan XSL transformer can work without X11 display on JDK 1.4+# It also looks like the default heap size of 64M is not enough for most cases# so the maximum heap size is set to 128Mif [ -z "$JAVA_OPTS" ]; thenJAVA_OPTS="-Djava.awt.headless=true -Xmx128M"fi# End of variables that can be overwritten in $DEFAULT# overwrite settings from default fileif [ -f "$DEFAULT" ]; then. "$DEFAULT"fiif [ ! -f "$CATALINA_HOME/bin/bootstrap.jar" ]; thenlog_failure_msg "$NAME is not installed"exit 1fiPOLICY_CACHE="$CATALINA_BASE/work/catalina.policy"if [ -z "$CATALINA_TMPDIR" ]; thenCATALINA_TMPDIR="$JVM_TMP"fi# Set the JSP compiler if set in the tomcat.default fileif [ -n "$JSP_COMPILER" ]; thenJAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=\"$JSP_COMPILER\""fiSECURITY=""if [ "$tomcat_SECURITY" = "yes" ]; thenSECURITY="-security"fi# Define other required variablesCATALINA_PID="/var/run/$NAME.pid"CATALINA_SH="$CATALINA_HOME/bin/catalina.sh"# Look for Java Secure Sockets Extension (JSSE) JARsif [ -z "${JSSE_HOME}" -a -r "${JAVA_HOME}/jre/lib/jsse.jar" ]; then JSSE_HOME="${JAVA_HOME}/jre/"ficatalina_sh() {# Escape any double quotes in the value of JAVA_OPTSJAVA_OPTS="$(echo $JAVA_OPTS | sed 's/\"/\\\"/g')"AUTHBIND_COMMAND=""if [ "$AUTHBIND" = "yes" -a "$1" = "start" ]; thenJAVA_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" ]; thenTOMCAT_SH="'$TOMCAT_SH'"fi# Run the catalina.sh script as a daemonset +etouch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.outchown $tomcat_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.outstart-stop-daemon --start -b -u "$tomcat_USER" -g "$tomcat_GROUP" \-c "$tomcat_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \-x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"status="$?"set +a -ereturn $status}case "$1" in start)if [ -z "$JAVA_HOME" ]; thenlog_failure_msg "no JDK found - please set JAVA_HOME"exit 1fiif [ ! -d "$CATALINA_BASE/conf" ]; thenlog_failure_msg "invalid CATALINA_BASE: $CATALINA_BASE"exit 1filog_daemon_msg "Starting $DESC" "$NAME"if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \--user $tomcat_USER --exec "$JAVA_HOME/bin/java" \>/dev/null; then# Regenerate POLICY_CACHE file#umask 022#echo "// AUTO-GENERATED FILE from /etc/tomcat/policy.d/" \#> "$POLICY_CACHE"#echo "" >> "$POLICY_CACHE"#cat $CATALINA_BASE/conf/policy.d/*.policy \#>> "$POLICY_CACHE"# Remove / recreate JVM_TMP directoryrm -rf "$JVM_TMP"mkdir -p "$JVM_TMP" || {log_failure_msg "could not create JVM temporary directory"exit 1}chown $tomcat_USER "$JVM_TMP"catalina_sh start $SECURITYsleep 5 if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \--user $tomcat_USER --exec "$JAVA_HOME/bin/java" \>/dev/null; thenif [ -f "$CATALINA_PID" ]; thenrm -f "$CATALINA_PID"filog_end_msg 1elselog_end_msg 0fielse log_progress_msg "(already running)"log_end_msg 0fi;; stop)log_daemon_msg "Stopping $DESC" "$NAME"set +eif [ -f "$CATALINA_PID" ]; then start-stop-daemon --stop --pidfile "$CATALINA_PID" \--user "$tomcat_USER" \--retry=TERM/20/KILL/5 >/dev/nullif [ $? -eq 1 ]; thenlog_progress_msg "$DESC is not running but pid file exists, cleaning up"elif [ $? -eq 3 ]; thenPID="`cat $CATALINA_PID`"log_failure_msg "Failed to stop $NAME (pid $PID)"exit 1firm -f "$CATALINA_PID"rm -rf "$JVM_TMP"elselog_progress_msg "(not running)"filog_end_msg 0set -e;; status)set +estart-stop-daemon --test --start --pidfile "$CATALINA_PID" \--user $tomcat_USER --exec "$JAVA_HOME/bin/java" \>/dev/null 2>&1if [ "$?" = "0" ]; thenif [ -f "$CATALINA_PID" ]; then log_success_msg "$DESC is not running, but pid file exists."exit 1else log_success_msg "$DESC is not running."exit 3fielselog_success_msg "$DESC is running with pid `cat $CATALINA_PID`"fiset -e ;; restart|force-reload)if [ -f "$CATALINA_PID" ]; then$0 stopsleep 1fi$0 start;; try-restart) if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \--user $tomcat_USER --exec "$JAVA_HOME/bin/java" \>/dev/null; then$0 startfi ;; *)log_success_msg "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"exit 1;;esacexit 0
1. If the Tomcat file name does not have a soft connection, modify it.
Name = Tomcat
2. If the user name and group name are not tomcat, modify them.
# Run Tomcat as this user ID and group ID
Tomcat_user = Tomcat
Tomcat_group = Tomcat
3. If java_home is not present this time, add it or set java_home in your environment variables.
JDK _ dirs = "/usr/local/JVM/Java/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"
Continue
Shell> update-rc.d Tomcat ults