#!/bin/bash # archiveweblogs.sh v1.0 # Troy Engel # Slightly modified by document author. # Used with permission. # # 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 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