adding archivecatalina
This commit is contained in:
parent
59391ed83e
commit
2bdc7e3c4f
1 changed files with 182 additions and 0 deletions
182
shell/archivecatalina.sh
Normal file
182
shell/archivecatalina.sh
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC2086
|
||||
#
|
||||
# archive catalina.out
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
## SETTINGS MUST BE CHANGED TO USE THIS SCRIPT ##
|
||||
|
||||
# This script will operate on the already rotated catalina.out logfiles
|
||||
# generated by the changing catalina.sh to use a piped logging method
|
||||
# such as:
|
||||
#
|
||||
# org.apache.catalina.startup.Bootstrap "$@" start \
|
||||
# |/usr/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y%m%d-%H%M 200M >> /dev/null 2>&1 &
|
||||
|
||||
# Run this from crontab nightly at an off hour,
|
||||
# as gzip can suck up some serious CPU on huge logs:
|
||||
# 0 2 * * * /opt/sbin/archivecatalina.sh
|
||||
|
||||
########## SETTINGS BEGIN ##########
|
||||
|
||||
# ARCHIVE_METHOD settings
|
||||
# 0 = unset (default)
|
||||
# 1 = compress in place
|
||||
# 2 = move to another location
|
||||
# 3 = compress and move
|
||||
ARCHIVE_METHOD=0
|
||||
|
||||
# DURATION_KEEP setting
|
||||
# <n> = number of days prior to keep around
|
||||
DURATION_KEEP=28
|
||||
|
||||
# CATALINA_LOGS setting
|
||||
# path to source catalina.out.* files
|
||||
CATALINA_LOGS=/usr/local/tomcat/logs
|
||||
|
||||
# CATALINA_ARCH setting
|
||||
# path to store older logs based on ARCHIVE_METHOD=2 or 3
|
||||
# NOTE: this directory is NOT autocleaned on purpose!!
|
||||
CATALINA_ARCH=/mnt/server/arclogs
|
||||
|
||||
# DURATION_WORK setting
|
||||
# <n> = number of days prior to start working (default 1 day)
|
||||
DURATION_WORK=1
|
||||
|
||||
########## SETTINGS END ##########
|
||||
|
||||
# What's our log name
|
||||
LOG_BASE="catalina.out"
|
||||
|
||||
# Errorlevels
|
||||
ERR_ERROR=33
|
||||
ERR_PANIC=66
|
||||
|
||||
# Default RedHat program locations
|
||||
MV=/bin/mv
|
||||
DT=/bin/date
|
||||
RM=/bin/rm
|
||||
ID=/usr/bin/id
|
||||
GZ=/usr/bin/gzip
|
||||
|
||||
# Are we root?
|
||||
USER=$($ID -u)
|
||||
if [ "X$USER" != "X0" ]; then
|
||||
echo "PANIC: Only root can run this script!"
|
||||
exit $ERR_PANIC
|
||||
fi
|
||||
|
||||
# Sanity checks
|
||||
if [ $ARCHIVE_METHOD -eq 0 ]; then
|
||||
echo "PANIC: ARCHIVE_METHOD is set to 0, please configure the script."
|
||||
exit $ERR_PANIC
|
||||
fi
|
||||
if [ $DURATION_WORK -lt 1 ]; then
|
||||
echo "PANIC: DURATION_WORK is set to less than one day."
|
||||
exit $ERR_PANIC
|
||||
fi
|
||||
if [ $DURATION_KEEP -le $DURATION_WORK ]; then
|
||||
echo "PANIC: DURATION_KEEP is less than or equal to DURATION_WORK."
|
||||
exit $ERR_PANIC
|
||||
fi
|
||||
|
||||
# Does the source path exist?
|
||||
if [ ! -x "$CATALINA_LOGS" ]; then
|
||||
echo "ERROR: $CATALINA_LOGS doesn't exist!"
|
||||
exit $ERR_ERROR
|
||||
fi
|
||||
|
||||
# Backup dir exists/writable?
|
||||
if [ $ARCHIVE_METHOD -eq 2 ] || [ $ARCHIVE_METHOD -eq 3 ]; then
|
||||
if [ ! -x "$CATALINA_ARCH" ]; then
|
||||
echo "ERROR: $CATALINA_ARCH doesn't exist or isn't writable!"
|
||||
exit $ERR_ERROR
|
||||
fi
|
||||
fi
|
||||
|
||||
# generate fromat stamps
|
||||
DATE_WORK=$($DT --date "now - $DURATION_WORK days" +"%Y%m%d")
|
||||
DATE_KEEP=$($DT --date "now - $DURATION_KEEP days" +"%Y%m%d")
|
||||
|
||||
# log actions below depends on formatting looking like:
|
||||
# /some/path/catalina.out.20100520-1345 (YYYYMMDD-HHMM)
|
||||
# (.gz is accounted for)
|
||||
|
||||
# ARCHIVE_METHOD=1
|
||||
compress_keep (){
|
||||
for logfile in "$CATALINA_LOGS/$LOG_BASE."*; do
|
||||
# if it ends in gz it's already compressed
|
||||
if [ "${logfile:(-3):3}" == ".gz" ]; then
|
||||
continue
|
||||
else
|
||||
# grab the %Y%m%d out of the name
|
||||
DTS=${logfile:(-13):8}
|
||||
if [ $DTS -ge $DATE_KEEP ] && [ $DTS -le $DATE_WORK ]; then
|
||||
# compress in place
|
||||
$GZ "$logfile"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# ARCHIVE_METHOD=2
|
||||
move_only (){
|
||||
for logfile in "$CATALINA_LOGS/$LOG_BASE."*; do
|
||||
# strip off .gz, we don't care if it's compressed
|
||||
logtemp=${logfile%.gz}
|
||||
DTS=${logtemp:(-13):8}
|
||||
if [ $DTS -ge $DATE_KEEP ] && [ $DTS -le $DATE_WORK ]; then
|
||||
$MV -f "$logfile" "$CATALINA_ARCH/"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# ARCHIVE_METHOD=3
|
||||
compress_move (){
|
||||
for logfile in "$CATALINA_LOGS/$LOG_BASE."*; do
|
||||
logtemp=${logfile%.gz}
|
||||
DTS=${logtemp:(-13):8}
|
||||
if [ $DTS -ge $DATE_KEEP ] && [ $DTS -le $DATE_WORK ]; then
|
||||
# already compressed
|
||||
if [ ${logfile:(-3):3} == ".gz" ]; then
|
||||
$MV -f "$logfile" "$CATALINA_ARCH/"
|
||||
else
|
||||
$GZ -c "$logfile" >> "$CATALINA_ARCH/$logfile.gz"
|
||||
$RM -f "$logfile"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# cleanup older than DURATION_KEEP
|
||||
cleanup_older (){
|
||||
for logfile in "$CATALINA_LOGS/$LOG_BASE."*; do
|
||||
logtemp=${logfile%.gz}
|
||||
DTS=${logtemp:(-13):8}
|
||||
if [ $DTS -lt $DATE_KEEP ]; then
|
||||
$RM -f "$logfile"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# the main case
|
||||
case $ARCHIVE_METHOD in
|
||||
1)
|
||||
compress_keep
|
||||
;;
|
||||
2)
|
||||
move_only
|
||||
;;
|
||||
3)
|
||||
compress_move
|
||||
;;
|
||||
*)
|
||||
echo "PANIC: Invalid ARCHIVE_METHOD settting: $ARCHIVE_METHOD"
|
||||
exit $ERR_PANIC
|
||||
esac
|
||||
|
||||
# do a final cleanup
|
||||
cleanup_older
|
||||
|
||||
exit 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue