1.安装编译所需要的gcc

[root@web1 unix]# yum -y install gcc

编译安装

[root@web1 ~]# tar -zxvf apache-tomcat-8.5.31.tar.gz -C /usr/local/tomcat

[root@web1 ~]# cd /usr/local/tomcat/bin

[root@web1 bin]# tar -zxvf commons-daemon-native.tar.gz

[root@web1 bin]# cd commons-daemon-1.0.15-native-src/unix/

[root@web1 unix]# ./configure

[root@web1 unix]# make

[root@web1 unix]# cp jsvc ../..

[root@web1 unix]# cd ../..

[root@web1 bin]# cp daemon.sh /etc/init.d/tomcat

2.修改/etc/init.d/tomcat

红色标记是修改过的地方

#!/bin/sh

# chkconfig: 2345 64 36

# description: Tomcat Server.

# 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.

#

# -----------------------------------------------------------------------------

# Commons Daemon wrapper script.

# -----------------------------------------------------------------------------

#

# resolve links - $0 may be a softlink

JAVA_HOME=/usr/java/jdk1.8.0_171/

CATALINA_HOME=/usr/local/tomcat

CATALINA_BASE=$CATALINA_HOME

DAEMON_HOME=/usr/local/tomcat/bin

TOMCAT_USER=root

ARG0="$0"

while [ -h "$ARG0" ]; do

ls=`ls -ld "$ARG0"`

link=`expr "$ls" : '.*-> \(.*\)$'`

if expr "$link" : '/.*' > /dev/null; then

ARG0="$link"

else

ARG0="`dirname $ARG0`/$link"

fi

done

DIRNAME="`dirname $ARG0`"

PROGRAM="`basename $ARG0`"

while [ ".$1" != . ]

do

case "$1" in

--java-home )

JAVA_HOME="$2"

shift; shift;

continue

;;

--catalina-home )

CATALINA_HOME="$2"

shift; shift;

continue

;;

--catalina-base )

CATALINA_BASE="$2"

shift; shift;

continue

;;

--catalina-pid )

CATALINA_PID="$2"

shift; shift;

continue

;;

--tomcat-user )

TOMCAT_USER="$2"

shift; shift;

continue

;;

--service-start-wait-time )

SERVICE_START_WAIT_TIME="$2"

shift; shift;

continue

;;

* )

break

;;

esac

done

# OS specific support (must be 'true' or 'false').

cygwin=false;

darwin=false;

case "`uname`" in

CYGWIN*)

cygwin=true

;;

Darwin*)

darwin=true

;;

esac

# Use the maximum available, or set MAX_FD != -1 to use that

test ".$MAX_FD" = . && MAX_FD="maximum"

# Setup parameters for running the jsvc

#

#修改TOMCAT_USER使用上面配置的TOMCAT_USER变量

test ".$TOMCAT_USER" = . && TOMCAT_USER=$TOMCAT_USER

# Set JAVA_HOME to working JDK or JRE

# JAVA_HOME=/opt/jdk-1.6.0.22

# If not set we'll try to guess the JAVA_HOME

# from java binary if on the PATH

#

if [ -z "$JAVA_HOME" ]; then

JAVA_BIN="`which java 2>/dev/null || type java 2>&1`"

test -x "$JAVA_BIN" && JAVA_HOME="`dirname $JAVA_BIN`"

test ".$JAVA_HOME" != . && JAVA_HOME=`cd "$JAVA_HOME/.." >/dev/null; pwd`

else

JAVA_BIN="$JAVA_HOME/bin/java"

fi

# Only set CATALINA_HOME if not already set

test ".$CATALINA_HOME" = . && CATALINA_HOME=`cd "$DIRNAME/.." >/dev/null; pwd`

test ".$CATALINA_BASE" = . && CATALINA_BASE="$CATALINA_HOME"

test ".$CATALINA_MAIN" = . && CATALINA_MAIN=org.apache.catalina.startup.Bootstrap

test ".$JSVC" = . && JSVC="$CATALINA_BASE/bin/jsvc"

# Set the default service-start wait time if necessary

test ".$SERVICE_START_WAIT_TIME" = . && SERVICE_START_WAIT_TIME=10

# Ensure that any user defined CLASSPATH variables are not used on startup,

# but allow them to be specified in setenv.sh, in rare case when it is needed.

CLASSPATH=

JAVA_OPTS=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then

. "$CATALINA_BASE/bin/setenv.sh"

elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then

. "$CATALINA_HOME/bin/setenv.sh"

fi

# Add on extra jar files to CLASSPATH

# tomcat-juli.jar can be over-ridden per instance

test ".$CLASSPATH" != . && CLASSPATH="${CLASSPATH}:"

if [ "$CATALINA_BASE" != "$CATALINA_HOME" ] && [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then

CLASSPATH="$CLASSPATH$CATALINA_BASE/bin/tomcat-juli.jar:$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar"

else

CLASSPATH="$CLASSPATH$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar"

fi

#test ".$CATALINA_OUT" = . && CATALINA_OUT="$CATALINA_BASE/logs/catalina.out"

#修改tomcat输出的文件名catalina-daemon.out为catalian.out

test ".$CATALINA_OUT" = . && CATALINA_OUT="$CATALINA_BASE/logs/catalina.out"

test ".$CATALINA_TMP" = . && CATALINA_TMP="$CATALINA_BASE/temp"

# Set juli LogManager config file if it is present and an override has not been issued

if [ -z "$LOGGING_CONFIG" ]; then

if [ -r "$CATALINA_BASE/conf/logging.properties" ]; then

LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"

else

# Bugzilla 45585

LOGGING_CONFIG="-Dnop"

fi

fi

test ".$LOGGING_MANAGER" = . && LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"

test ".$CATALINA_PID" = . && CATALINA_PID="$CATALINA_BASE/logs/catalina-daemon.pid"

# Increase the maximum file descriptors if we can

if [ "$cygwin" = "false" ]; then

MAX_FD_LIMIT=`ulimit -H -n`

if [ "$?" -eq 0 ]; then

# Darwin does not allow RLIMIT_INFINITY on file soft limit

if [ "$darwin" = "true" -a "$MAX_FD_LIMIT" = "unlimited" ]; then

MAX_FD_LIMIT=`/usr/sbin/sysctl -n kern.maxfilesperproc`

fi

test ".$MAX_FD" = ".maximum" && MAX_FD="$MAX_FD_LIMIT"

ulimit -n $MAX_FD

if [ "$?" -ne 0 ]; then

echo "$PROGRAM: Could not set maximum file descriptor limit: $MAX_FD"

fi

else

echo "$PROGRAM: Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"

fi

fi

# ----- Execute The Requested Command -----------------------------------------

case "$1" in

run    )  

shift

"$JSVC" $* \

$JSVC_OPTS \

-java-home "$JAVA_HOME" \

-pidfile "$CATALINA_PID" \

-wait "$SERVICE_START_WAIT_TIME" \

-nodetach \

-outfile "&1" \

-errfile "&2" \

-classpath "$CLASSPATH" \

"$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \

-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \

-Dcatalina.base="$CATALINA_BASE" \

-Dcatalina.home="$CATALINA_HOME" \

-Djava.io.tmpdir="$CATALINA_TMP" \

$CATALINA_MAIN

exit $?

;;

start  )  

"$JSVC" $JSVC_OPTS \

-java-home "$JAVA_HOME" \

-user $TOMCAT_USER \

-pidfile "$CATALINA_PID" \

-wait "$SERVICE_START_WAIT_TIME" \

-outfile "$CATALINA_OUT" \

-errfile "&1" \

-classpath "$CLASSPATH" \

"$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \

-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \

-Dcatalina.base="$CATALINA_BASE" \

-Dcatalina.home="$CATALINA_HOME" \

-Djava.io.tmpdir="$CATALINA_TMP" \

$CATALINA_MAIN

exit $?

;;

stop   )  

"$JSVC" $JSVC_OPTS \

-stop \

-pidfile "$CATALINA_PID" \

-classpath "$CLASSPATH" \

-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \

-Dcatalina.base="$CATALINA_BASE" \

-Dcatalina.home="$CATALINA_HOME" \

-Djava.io.tmpdir="$CATALINA_TMP" \

$CATALINA_MAIN

exit $?

;;

version )

"$JSVC" \

-java-home "$JAVA_HOME" \

-pidfile "$CATALINA_PID" \

-classpath "$CLASSPATH" \

-errfile "&2" \

-version \

-check \

$CATALINA_MAIN

if [ "$?" = 0 ]; then

"$JAVA_BIN" \

-classpath "$CATALINA_HOME/lib/catalina.jar" \

org.apache.catalina.util.ServerInfo

fi

exit $?

;;

*      )  

echo "Unknown command: \`$1'"

echo "Usage: $PROGRAM ( commands ... )"

echo "commands:"

echo " run              Start Tomcat without detaching from console"

echo " start            Start Tomcat"

echo " stop             Stop Tomcat"

echo " version          What version of commons daemon and Tomcat"

echo "                   are you running?"

exit 1

;;

esac

3.修改tomcat的启动参数

在/usr/local/tomcat/bin中新建setenv.sh

#!/bin/bash

export JAVA_OPTS='-server -Xms4096m -Xmx4096m -Djava.awt.headless=true'

4.启动tomcat

[root@web1 ~]# service tomcat start

5.添加tomcat自启动                            

[root@web1 ~]# chkconfig --levels 2345 tomcat on

6.停止tomcat

[root@web1 ~]# service tomcat stop

如果以上命令卡顿时间过长,可能无法停止tomcat,需要使用ps -ef | grep tomcat查看正在运行的tomcat,执行kill -9 结束进程

[root@web1 ~]# ps -ef | grep tomcat

root     26663      1 0 Dec29 ?       00:00:00 jsvc.exec -java-home /usr/java/jdk1.8.0_171/ -user root -pidfile /usr/local/tomcat/logs/catalina-daemon.pid -wait 10 -outfile /usr/local/tomcat/logs/catalina.out -errfile &1 -classpath /usr/local/tomcat/bin/commons-daemon.jar:/usr/local/tomcat/bin/bootstrap.jar -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.proper

root     26664  26663 4 Dec29 ?       01:54:22 jsvc.exec -java-home /usr/java/jdk1.8.0_171/ -user root -pidfile /usr/local/tomcat/logs/catalina-daemon.pid -wait 10 -outfile /usr/local/tomcat/logs/catalina.out -errfile &1 -classpath /usr/local/tomcat/bin/commons-daemon.jar:/usr/local/tomcat/bin/bootstrap.jar -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

[root@web1 ~]# kill -9 26663

[root@web1 ~]# kill -9 26664