diff --git a/contrib/logs-archive b/contrib/logs-archive new file mode 100755 index 0000000..7f35dd4 --- /dev/null +++ b/contrib/logs-archive @@ -0,0 +1,86 @@ +#!/bin/bash +# Add ' -x' above to debug +# + +########################################################################### +# Configuration +########################################################################### +# Maximum age, in days, of log files to keep +MAX_LOGFILE_AGE=28 +# Minimum size of live log before rotating, see find(1) -size for format +MIN_ROTATE_SIZE="100M" +########################################################################### + +########################################################################### +# Helper functions +########################################################################### +################################################## +# Print program usage information. +################################################## +usage() { + echo "Usage: $(basename $1) [ live | beta | dev ]" +} +################################################## + +################################################## +################################################## +################################################## + +########################################################################### + +########################################################################### +# Check command line arguments +########################################################################### +EDDN_ENV="$1" +if [ -z "${EDDN_ENV}" ]; +then + usage $0 + exit 1 +fi +########################################################################### + +########################################################################### +# Perform rotation +########################################################################### +LOGS_DIR="${HOME}/${EDDN_ENV}/logs" +if [ ! -d "${LOGS_DIR}" ]; +then + echo "$(dirname): Logs directory doesn't exist: ${LOGS_DIR}" + exit 2 +fi + +cd ${LOGS_DIR} || exit 3 + +for service in gateway monitor relay ; +do + echo "Service: ${service}" + echo " Expiring old logs..." + find . -name "${service}.log.*.gz" -a -atime +${MAX_LOGFILE_AGE} -exec rm -fv {} \; + echo " DONE" + + echo " Checking if current logfile needs archiving..." + if [ ! -z "$(find . -name ${service}.log -a -size +${MIN_ROTATE_SIZE})" ]; + then + echo " Archiving ${service}.log ..." + # We have no means to tell the service to close and re-open output, it's + # to stdout/err anyway. So we copy it. + COMPRESSED_NAME="${service}.log.$(date --iso-8601=seconds)" + cp ${service}.log "${COMPRESSED_NAME}" + if [ $? -ne 0 ]; + then + echo " FAILED copying live log file to new archive!!!" + echo " Exiting from any further processing." + exit 4 + fi + # Truncate the live file. + :> ${service}.log + # Now compress the newly archived log + gzip -9v "${COMPRESSED_NAME}" + echo " DONE" + else + echo " No" + fi +done +########################################################################### + +# vim: tabstop=2 shiftwidth=2 expandtab wrapmargin=0 textwidth=0