diff --git a/shell/archiveweblogs.sh b/shell/archiveweblogs.sh new file mode 100644 index 0000000..addf099 --- /dev/null +++ b/shell/archiveweblogs.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# +# This script will preserve the normally rotated and +# thrown away weblogs from a default RedHat/Apache installation. +# It will save the files with a date/time stamp in the filename, +# bzipped, to a given directory. +# +# Run this from crontab nightly at an off hour, +# as bzip2 can suck up some serious CPU on huge logs: +# 0 2 * * * /opt/sbin/archiveweblogs.sh +# +# SPDX-License-Identifier: MIT + +PROBLEM=66 + +# Set this to your backup dir. +BKP_DIR=/opt/backups/weblogs + +# Default Apache/RedHat stuff +LOG_DAYS="4 3 2 1" +LOG_DIR=/var/log/httpd +LOG_FILES="access_log error_log" + +# Default RedHat program locations +LS=/bin/ls +MV=/bin/mv +ID=/usr/bin/id +CUT=/bin/cut +COL=/usr/bin/column +BZ2=/usr/bin/bzip2 + +# Are we root? +USER=$($ID -u) +if [ "X$USER" != "X0" ]; then + echo "PANIC: Only root can run this script!" + exit $PROBLEM +fi + +# Backup dir exists/writable? +if [ ! -x "$BKP_DIR" ]; then + echo "PANIC: $BKP_DIR doesn't exist or isn't writable!" + exit $PROBLEM +fi + +# Move, rename and bzip2 the logs +for logday in $LOG_DAYS; do + for logfile in $LOG_FILES; do + MYFILE="$LOG_DIR/$logfile.$logday" + if [ -w "$MYFILE" ]; then + DTS=$($LS -lgo --time-style=+%Y%m%d "$MYFILE" | $COL -t | $CUT -d ' ' -f7) + $MV "$MYFILE" "$BKP_DIR/$logfile.$DTS" + $BZ2 "$BKP_DIR/$logfile.$DTS" + else + # Only spew an error if the file exits (ergo non-writable). + if [ -f "$MYFILE" ]; then + echo "ERROR: $MYFILE not writable. Skipping." + fi + fi + done +done + +exit 0