linux nginx日志分割,Linux下自动分割Nginx日志文件(二)-----Cronolog

一,简介:cronolog 是一个简单的过滤程序,读取日志文件条目从标准输入和输出的每个条目并写入指定的日志文件的文件名模板和当前的日期和时间。当扩展文件名的变化,目前的文件是关闭,新开辟的。cronolog 旨在和一个Web服务器一起使用,如Apache,分割访问日志为每天或每月的日志。

二,特点:cronolog主要和Web服务器配置使用,特别是Apache服务器,Apache 默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计。安装cronolog后,可以将日志文件按时间分割,易于管理和分析。下面是与Apache配置的一些指令。

三,下载并安装cronolog:

1,下载cronolog程序

[root@localhost ~]#wget http://cronolog.org/download/cronolog-1.6.2.tar.gz

2,解压tar包

[root@localhost ~]#tar zxvf cronolog-1.6.2.tar.gz

3,进入该目录并安装

[root@localhost ~]#cd cronolog-1.6.2

[root@localhost ~]#./configure --prefix=/usr/local/cronolog-1.6.2/

[root@localhost ~]#make

[root@localhost ~]#make install

[root@localhost ~]#which cronolog

即可安装完成

四,cronolog的简单使用:

[root@localhost ~]# /usr/local/cronolog-1.6.2/sbin/cronolog -V

cronolog version 1.6.2

[root@localhost ~]# /usr/local/cronolog-1.6.2/sbin/cronolog -h

usage: /usr/local/cronolog-1.6.2/sbin/cronolog [OPTIONS] logfile-spec

-H NAME,   --hardlink=NAME maintain a hard link from NAME to current log

-S NAME,   --symlink=NAME  maintain a symbolic link from NAME to current log

-P NAME,   --prev-symlink=NAME  maintain a symbolic link from NAME to previous log

-l NAME,   --link=NAME     same as -S/--symlink

-h,        --help          print this help, then exit

-p PERIOD, --period=PERIOD set the rotation period explicitly

-d DELAY,  --delay=DELAY   set the rotation period delay

-o,        --once-only     create single output log from template (not rotated)

-x FILE,   --debug=FILE    write debug messages to FILE

( or to standard error if FILE is "-")

-a,        --american         American date formats

-e,        --european         European date formats (default)

-s,    --start-time=TIME   starting time

-z TZ, --time-zone=TZ      use TZ for timezone

-V,      --version         print version number, then exit

[root@localhost ~]# loggenerator | cronolog log_file_pattern

其中,loggenerator为产生log的程序,而log_file_pattern是日志文件的路径,可以在其中加入cronolog所支持的时间相关的pattern字符,如/www/log/%y/%m/%d/access.log。其pattern为%字符后跟一特殊字符,简述如下:

五,cronolog实战(一)----分割nginx日志

1,安装cronolog程序,前边有,省略。

2,创建一个命名管道

[root@localhost ~]#mkfifo  /usr/local/nginx/logs/access_log_pipe

3.配置nginx.conf文件

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http {

include       mime.types;

default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log  /usr/local/nginx/logs/access_log_pipe;#(生产的日志写到管道文件里)

4,测试写看是否有报错,无报错继续下一步。

[root@localhost ~]/usr/local/nginx/sbin/nginx -t

5,输入一下命令在nginx重启前,

[root@localhost logs]#  nohup cat /usr/local/nginx/logs/access_log_pipe | nohup /usr/local/cronolog-1.6.2/sbin/cronolog /usr/local/nginx/logs/%Y%m%d/access_%Y%m%d%H.log &

[1] 15718

[root@localhost logs]# nohup: ignoring input and redirecting stderr to stdout

nohup: appending output to `nohup.out'

解析: /usr/local/nginx/logs/access_log_pipe(生产的日志文件写到管道里) | nohup /usr/local/cronolog-1.6.2/sbin/cronolog (cronolog程序的绝对路径) /usr/local/nginx/logs/%Y%m%d/access_%Y%m%d%H.log & (存放分割文件的路径以当时的时间点为文件夹)

6,查看是否有生产的其日志文件。

[root@localhost logs]# ll

total 38992

drwxr-xr-x. 2 root  root      4096 Nov 19 16:19 20151119

六,cronolog实战(二)----分割Apache日志

1,安装省略

2,修改apache配置文件

CustomLog "|/usr/local/sbin/cronolog /usr/local/apache2/logs/access_log.%Y%m%d" combined

需要特别注意的是,这里的日志必须使用绝对路径,否则不会生成日志文件

3,将上面的 /usr/local/ /usr/local/apache2/logs/%m/access_log.%Y%m%d改为按月保存

/usr/local/apache2/logs/%m/access_log.%Y%m%d

4,重启下Apache,即可看见生成的日志。

七,cronolog实战(三)----分割tomcat的

1,下载cronolog程序

[root@localhost ~]#wget http://cronolog.org/download/cronolog-1.6.2.tar.gz

2,解压tar包

[root@localhost ~]#tar zxvf cronolog-1.6.2.tar.gz

3,进入该目录并安装

[root@localhost ~]#cd cronolog-1.6.2

[root@localhost ~]#./configure --prefix=/usr/local/cronolog-1.6.2/

[root@localhost ~]#make

[root@localhost ~]#make install

[root@localhost ~]#which cronolog

/usr/local/sbin/cronolog

4,cronolog的简单使用:

[root@localhost ~]# /usr/local/cronolog-1.6.2/sbin/cronolog -V

cronolog version 1.6.2

[root@localhost ~]# /usr/local/cronolog-1.6.2/sbin/cronolog -h

usage: /usr/local/cronolog-1.6.2/sbin/cronolog [OPTIONS] logfile-spec

-H NAME,   --hardlink=NAME maintain a hard link from NAME to current log

-S NAME,   --symlink=NAME  maintain a symbolic link from NAME to current log

-P NAME,   --prev-symlink=NAME  maintain a symbolic link from NAME to previous log

-l NAME,   --link=NAME     same as -S/--symlink

-h,        --help          print this help, then exit

-p PERIOD, --period=PERIOD set the rotation period explicitly

-d DELAY,  --delay=DELAY   set the rotation period delay

-o,        --once-only     create single output log from template (not rotated)

-x FILE,   --debug=FILE    write debug messages to FILE

( or to standard error if FILE is "-")

-a,        --american         American date formats

-e,        --european         European date formats (default)

-s,    --start-time=TIME   starting time

-z TZ, --time-zone=TZ      use TZ for timezone

-V,      --version         print version number, then exit

5,修改tomcat bin目录下的catalina.sh文件中的org.apache.catalina.startup.Bootstrap “$@” start  \

>> “$CATALINA_BASE”/logs/catalina.out 2>&1 &

为:org.apache.catalina.startup.Bootstrap "$@" start  2>&1 \

| /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &

touch “$CATALINA_BASE”/logs/catalina.out

这一行也可以注释掉

shift

touch "$CATALINA_OUT"

if [ "$1" = "-security" ] ; then

if [ $have_tty -eq 1 ]; then

echo "Using Security Manager"

fi

shift

eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

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

-Djava.security.manager \

-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \

-Dcatalina.base="\"$CATALINA_BASE\"" \

-Dcatalina.home="\"$CATALINA_HOME\"" \

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

org.apache.catalina.startup.Bootstrap "$@" start \

>> "$CATALINA_OUT" 2>&1 "&"

else

eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

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

-Dcatalina.base="\"$CATALINA_BASE\"" \

-Dcatalina.home="\"$CATALINA_HOME\"" \

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

org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \

|  /usr/local/cronolog-1.6.2/sbin/cronolog  "$CATALINA_BASE"/logs/

catalina.%Y-%m-%d.out >> /dev/null &

fi

if [ ! -z "$CATALINA_PID" ]; then

echo $! > "$CATALINA_PID"

fi

echo "Tomcat started."

elif [ "$1" = "stop" ] ; then

shift

c4418ddcb9528030213b959d069c09d4.png

6,重启下tomcat即可。

备注:catalina.sh文件为:[root@iZ2302vigsqZ bin]# cat catalina.sh

#!/bin/sh

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

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

# Control Script for the CATALINA Server

#

# Environment Variable Prerequisites

#

#   Do not set the variables in this script. Instead put them into a script

#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

#

#   CATALINA_HOME   May point at your Catalina "build" directory.

#

#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions

#                   of a Catalina installation.  If not present, resolves to

#                   the same directory that CATALINA_HOME points to.

#

#   CATALINA_OUT    (Optional) Full path to a file where stdout and stderr

#                   will be redirected.

#                   Default is $CATALINA_BASE/logs/catalina.out

#

#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",

#                   "run" or "debug" command is executed.

#                   Include here and not in JAVA_OPTS all options, that should

#                   only be used by Tomcat itself, not by the stop process,

#                   the version command etc.

#                   Examples are heap size, GC logging, JMX ports etc.

#

#   CATALINA_TMPDIR (Optional) Directory path location of temporary directory

#                   the JVM should use (java.io.tmpdir).  Defaults to

#                   $CATALINA_BASE/temp.

#

#   JAVA_HOME       Must point at your Java Development Kit installation.

#                   Required to run the with the "debug" argument.

#

#   JRE_HOME        Must point at your Java Runtime installation.

#                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME

#                   are both set, JRE_HOME is used.

#

#   JAVA_OPTS       (Optional) Java runtime options used when any command

#                   is executed.

#                   Include here and not in CATALINA_OPTS all options, that

#                   should be used by Tomcat and also by the stop process,

#                   the version command etc.

#                   Most options should go into CATALINA_OPTS.

#

#   JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories

#                   containing some jars in order to allow replacement of APIs

#                   created outside of the JCP (i.e. DOM and SAX from W3C).

#                   It can also be used to update the XML parser implementation.

#                   Defaults to $CATALINA_HOME/endorsed.

#

#   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"

#                   command is executed. The default is "dt_socket".

#

#   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"

#                   command is executed. The default is 8000.

#

#   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"

#                   command is executed. Specifies whether JVM should suspend

#                   execution immediately after startup. Default is "n".

#

#   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"

#                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,

#                   and JPDA_SUSPEND are ignored. Thus, all required jpda

#                   options MUST be specified. The default is:

#

#                   -agentlib:jdwp=transport=$JPDA_TRANSPORT,

#                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND

#

#   CATALINA_PID    (Optional) Path of the file which should contains the pid

#                   of the catalina startup java process, when start (fork) is

#                   used

#

#   LOGGING_CONFIG  (Optional) Override Tomcat's logging config file

#                   Example (all one line)

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

#

#   LOGGING_MANAGER (Optional) Override Tomcat's logging manager

#                   Example (all one line)

#                   LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

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

# OS specific support.  $var _must_ be set to either true or false.

cygwin=false

darwin=false

os400=false

case "`uname`" in

CYGWIN*) cygwin=true;;

Darwin*) darwin=true;;

OS400*) os400=true;;

esac

# resolve links - $0 may be a softlink

PRG="$0"

while [ -h "$PRG" ]; do

ls=`ls -ld "$PRG"`

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

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

PRG="$link"

else

PRG=`dirname "$PRG"`/"$link"

fi

done

# Get standard environment variables

PRGDIR=`dirname "$PRG"`

# Only set CATALINA_HOME if not already set

[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

# Copy CATALINA_BASE from CATALINA_HOME if not already set

[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

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

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

# For Cygwin, ensure paths are in UNIX format before anything is touched

if $cygwin; then

[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`

[ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`

[ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`

[ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`

[ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`

fi

# For OS400

if $os400; then

# Set job priority to standard for interactive (interactive - 6) by using

# the interactive priority - 6, the helper threads that respond to requests

# will be running at the same priority as interactive jobs.

COMMAND='chgjob job('$JOBNAME') runpty(6)'

system $COMMAND

# Enable multi threading

export QIBM_MULTI_THREADED=Y

fi

# Get standard Java environment variables

if $os400; then

# -r will Only work on the os400 if the files are:

# 1. owned by the user

# 2. owned by the PRIMARY group of the user

# this will not work if the user belongs in secondary groups

. "$CATALINA_HOME"/bin/setclasspath.sh

else

if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then

. "$CATALINA_HOME"/bin/setclasspath.sh

else

echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"

echo "This file is needed to run this program"

exit 1

fi

fi

# Add on extra jar files to CLASSPATH

if [ ! -z "$CLASSPATH" ] ; then

CLASSPATH="$CLASSPATH":

fi

CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar

if [ -z "$CATALINA_OUT" ] ; then

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

fi

if [ -z "$CATALINA_TMPDIR" ] ; then

# Define the java.io.tmpdir to use for Catalina

CATALINA_TMPDIR="$CATALINA_BASE"/temp

fi

# Add tomcat-juli.jar to classpath

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

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

CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar

else

CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar

fi

# Bugzilla 37848: When no TTY is available, don't output to console

have_tty=0

if [ "`tty`" != "not a tty" ]; then

have_tty=1

fi

# For Cygwin, switch paths to Windows format before running java

if $cygwin; then

JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`

JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`

CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`

CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`

CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`

CLASSPATH=`cygpath --path --windows "$CLASSPATH"`

JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`

fi

# 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

if [ -z "$LOGGING_MANAGER" ]; then

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

fi

# Uncomment the following line to make the umask available when using the

# org.apache.catalina.security.SecurityListener

#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"

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

# Bugzilla 37848: only output this if we have a TTY

if [ $have_tty -eq 1 ]; then

echo "Using CATALINA_BASE:   $CATALINA_BASE"

echo "Using CATALINA_HOME:   $CATALINA_HOME"

echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"

if [ "$1" = "debug" ] ; then

echo "Using JAVA_HOME:       $JAVA_HOME"

else

echo "Using JRE_HOME:        $JRE_HOME"

fi

echo "Using CLASSPATH:       $CLASSPATH"

if [ ! -z "$CATALINA_PID" ]; then

echo "Using CATALINA_PID:    $CATALINA_PID"

fi

fi

if [ "$1" = "jpda" ] ; then

if [ -z "$JPDA_TRANSPORT" ]; then

JPDA_TRANSPORT="dt_socket"

fi

if [ -z "$JPDA_ADDRESS" ]; then

JPDA_ADDRESS="8000"

fi

if [ -z "$JPDA_SUSPEND" ]; then

JPDA_SUSPEND="n"

fi

if [ -z "$JPDA_OPTS" ]; then

JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"

fi

CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"

shift

fi

if [ "$1" = "debug" ] ; then

if $os400; then

echo "Debug command not available on OS400"

exit 1

else

shift

if [ "$1" = "-security" ] ; then

if [ $have_tty -eq 1 ]; then

echo "Using Security Manager"

fi

shift

exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

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

-sourcepath "$CATALINA_HOME"/../../java \

-Djava.security.manager \

-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \

-Dcatalina.base="$CATALINA_BASE" \

-Dcatalina.home="$CATALINA_HOME" \

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

org.apache.catalina.startup.Bootstrap "$@" start

else

exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

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

-sourcepath "$CATALINA_HOME"/../../java \

-Dcatalina.base="$CATALINA_BASE" \

-Dcatalina.home="$CATALINA_HOME" \

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

org.apache.catalina.startup.Bootstrap "$@" start

fi

fi

elif [ "$1" = "run" ]; then

shift

if [ "$1" = "-security" ] ; then

if [ $have_tty -eq 1 ]; then

echo "Using Security Manager"

fi

shift

eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

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

-Djava.security.manager \

-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \

-Dcatalina.base="\"$CATALINA_BASE\"" \

-Dcatalina.home="\"$CATALINA_HOME\"" \

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

org.apache.catalina.startup.Bootstrap "$@" start

else

eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

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

-Dcatalina.base="\"$CATALINA_BASE\"" \

-Dcatalina.home="\"$CATALINA_HOME\"" \

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

org.apache.catalina.startup.Bootstrap "$@" start

fi

elif [ "$1" = "start" ] ; then

if [ ! -z "$CATALINA_PID" ]; then

if [ -f "$CATALINA_PID" ]; then

if [ -s "$CATALINA_PID" ]; then

echo "Existing PID file found during start."

if [ -r "$CATALINA_PID" ]; then

PID=`cat "$CATALINA_PID"`

ps -p $PID >/dev/null 2>&1

if [ $? -eq 0 ] ; then

echo "Tomcat appears to still be running with PID $PID. Start aborted."

exit 1

else

echo "Removing/clearing stale PID file."

rm -f "$CATALINA_PID" >/dev/null 2>&1

if [ $? != 0 ]; then

if [ -w "$CATALINA_PID" ]; then

cat /dev/null > "$CATALINA_PID"

else

echo "Unable to remove or clear stale PID file. Start aborted."

exit 1

fi

fi

fi

else

echo "Unable to read PID file. Start aborted."

exit 1

fi

else

rm -f "$CATALINA_PID" >/dev/null 2>&1

if [ $? != 0 ]; then

if [ ! -w "$CATALINA_PID" ]; then

echo "Unable to remove or write to empty PID file. Start aborted."

exit 1

fi

fi

fi

fi

fi

shift

touch "$CATALINA_OUT"

if [ "$1" = "-security" ] ; then

if [ $have_tty -eq 1 ]; then

echo "Using Security Manager"

fi

shift

eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

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

-Djava.security.manager \

-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \

-Dcatalina.base="\"$CATALINA_BASE\"" \

-Dcatalina.home="\"$CATALINA_HOME\"" \

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

org.apache.catalina.startup.Bootstrap "$@" start \

>> "$CATALINA_OUT" 2>&1 "&"

else

eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

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

-Dcatalina.base="\"$CATALINA_BASE\"" \

-Dcatalina.home="\"$CATALINA_HOME\"" \

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

org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \

|  /usr/local/cronolog-1.6.2/sbin/cronolog  "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &

fi

if [ ! -z "$CATALINA_PID" ]; then

echo $! > "$CATALINA_PID"

fi

echo "Tomcat started."

elif [ "$1" = "stop" ] ; then

shift

SLEEP=5

if [ ! -z "$1" ]; then

echo $1 | grep "[^0-9]" >/dev/null 2>&1

if [ $? -gt 0 ]; then

SLEEP=$1

shift

fi

fi

FORCE=0

if [ "$1" = "-force" ]; then

shift

FORCE=1

fi

if [ ! -z "$CATALINA_PID" ]; then

if [ -f "$CATALINA_PID" ]; then

if [ -s "$CATALINA_PID" ]; then

kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1

if [ $? -gt 0 ]; then

echo "PID file found but no matching process was found. Stop aborted."

exit 1

fi

else

echo "PID file is empty and has been ignored."

fi

else

echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted."

exit 1

fi

fi

eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \

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

-Dcatalina.base="\"$CATALINA_BASE\"" \

-Dcatalina.home="\"$CATALINA_HOME\"" \

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

org.apache.catalina.startup.Bootstrap "$@" stop

# stop failed. Shutdown port disabled? Try a normal kill.

if [ $? != 0 ]; then

if [ ! -z "$CATALINA_PID" ]; then

echo "The stop command failed. Attempting to signal the process to stop through OS signal."

kill -15 `cat "$CATALINA_PID"` >/dev/null 2>&1

fi

fi

if [ ! -z "$CATALINA_PID" ]; then

if [ -f "$CATALINA_PID" ]; then

while [ $SLEEP -ge 0 ]; do

kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1

if [ $? -gt 0 ]; then

rm -f "$CATALINA_PID" >/dev/null 2>&1

if [ $? != 0 ]; then

if [ -w "$CATALINA_PID" ]; then

cat /dev/null > "$CATALINA_PID"

# If Tomcat has stopped don't try and force a stop with an empty PID file

FORCE=0

else

echo "The PID file could not be removed or cleared."

fi

fi

echo "Tomcat stopped."

break

fi

if [ $SLEEP -gt 0 ]; then

sleep 1

fi

if [ $SLEEP -eq 0 ]; then

if [ $FORCE -eq 0 ]; then

echo "Tomcat did not stop in time. PID file was not removed. To aid diagnostics a thread dump has been written to standard out."

kill -3 `cat "$CATALINA_PID"`

fi

fi

SLEEP=`expr $SLEEP - 1 `

done

fi

fi

KILL_SLEEP_INTERVAL=5

if [ $FORCE -eq 1 ]; then

if [ -z "$CATALINA_PID" ]; then

echo "Kill failed: \$CATALINA_PID not set"

else

if [ -f "$CATALINA_PID" ]; then

PID=`cat "$CATALINA_PID"`

echo "Killing Tomcat with the PID: $PID"

kill -9 $PID

while [ $KILL_SLEEP_INTERVAL -ge 0 ]; do

kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1

if [ $? -gt 0 ]; then

rm -f "$CATALINA_PID" >/dev/null 2>&1

if [ $? != 0 ]; then

if [ -w "$CATALINA_PID" ]; then

cat /dev/null > "$CATALINA_PID"

else

echo "The PID file could not be removed."

fi

fi

# Set this to zero else a warning will be issued about the process still running

KILL_SLEEP_INTERVAL=0

echo "The Tomcat process has been killed."

break

fi

if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then

sleep 1

fi

KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 `

done

if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then

echo "Tomcat has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE."

fi

fi

fi

fi

elif [ "$1" = "configtest" ] ; then

eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \

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

-Dcatalina.base="\"$CATALINA_BASE\"" \

-Dcatalina.home="\"$CATALINA_HOME\"" \

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

org.apache.catalina.startup.Bootstrap configtest

result=$?

if [ $result -ne 0 ]; then

echo "Configuration error detected!"

fi

exit $result

elif [ "$1" = "version" ] ; then

"$_RUNJAVA"   \

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

org.apache.catalina.util.ServerInfo

else

echo "Usage: catalina.sh ( commands ... )"

echo "commands:"

if $os400; then

echo "  debug             Start Catalina in a debugger (not available on OS400)"

echo "  debug -security   Debug Catalina with a security manager (not available on OS400)"

else

echo "  debug             Start Catalina in a debugger"

echo "  debug -security   Debug Catalina with a security manager"

fi

echo "  jpda start        Start Catalina under JPDA debugger"

echo "  run               Start Catalina in the current window"

echo "  run -security     Start in the current window with security manager"

echo "  start             Start Catalina in a separate window"

echo "  start -security   Start in a separate window with security manager"

echo "  stop              Stop Catalina, waiting up to 5 seconds for the process to end"

echo "  stop n            Stop Catalina, waiting up to n seconds for the process to end"

echo "  stop -force       Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"

echo "  stop n -force     Stop Catalina, wait up to n seconds and then use kill -KILL if still running"

echo "  configtest        Run a basic syntax check on server.xml - check exit code for result"

echo "  version           What version of tomcat are you running?"

echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined"

exit 1

fi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值