From 22cad610407325f1c812c971f2b213f593ee9324 Mon Sep 17 00:00:00 2001 From: Timo Makinen Date: Mon, 31 Oct 2022 19:52:14 +0000 Subject: [PATCH] syslogd: Re-write and simplify log rotate script --- roles/syslogd/files/syslog-archive.sh | 89 ++++++--------------------- 1 file changed, 20 insertions(+), 69 deletions(-) diff --git a/roles/syslogd/files/syslog-archive.sh b/roles/syslogd/files/syslog-archive.sh index c73123a..63a646d 100755 --- a/roles/syslogd/files/syslog-archive.sh +++ b/roles/syslogd/files/syslog-archive.sh @@ -1,79 +1,30 @@ #!/bin/sh -LOGDIR="/srv/log" -ARCHIVE="${LOGDIR}/archive" - -DATE="`date +%Y-%m-%d`" -YEAR="`date +%Y`" +set -eu umask 027 -myerror() -{ - echo "Error: $*" 1>&2 +_date="$(date +%Y-%m-%d)" +_logfile="/srv/log/all.log" + +_archivedir="$(dirname "$_logfile")/archive/$(date +%Y)" + +if [ -f "$_logfile" ]; then + if [ ! -s "$_logfile" ]; then + echo "ERROR: Not rotating empty logfile '${_logfile}'" 1>&2 + exit 1 + fi +else + echo "ERROR: Cannot find logfile '${_logfile}'" 1>&2 exit 1 -} +fi -archive_log() -{ - FILE="${1}" - DEST="${2}" +_dest="${_archivedir}/$(basename "$_logfile").${_date}" +[ -d "$_archivedir" ] || mkdir "$_archivedir" - if [ -f "${DEST}" -o -f "${DEST}.gz" ]; then - echo "Skipping ${FILE}: Archive already exists" 1>&2 - else - echo "Archiving file ${FILE} to ${DEST}" - mv "${FILE}" "${DEST}" - touch "${FILE}" - LOGS="${LOGS} ${DEST}" - fi -} +mv "$_logfile" "${_dest}" +touch "$_logfile" -restart_syslog() -{ - for i in syslog.pid rsyslogd.pid syslogd.pid ; do - if [ -f "/var/run/$i" ]; then - PIDFILE="/var/run/$i" - break - fi - done - if [ "blah${PIDFILE}" = "blah" ]; then - myerror "Cannot find syslog pid file" - fi - kill -HUP `cat ${PIDFILE}` -} +kill -HUP "$(cat /var/log/syslog.pid)" -[ $# -gt 0 ] || myerror "Usage: `basename $0` [file|dir] ..." - -[ -d ${LOGDIR} ] || myerror "Not a directory: ${LOGDIR}" - -while [ "$*" ]; do - if [ -f "${LOGDIR}/${1}" ]; then - dstdir=${ARCHIVE}/${YEAR} - dstfile=${dstdir}/`basename ${1}`.${DATE} - [ -d "${dstdir}" ] || mkdir -p ${dstdir} - archive_log ${LOGDIR}/${1} ${dstfile} - elif [ -d "${LOGDIR}/${1}" ]; then - for f in ${LOGDIR}/${1}/*.log; do - if [ -f "${f}" ]; then - dstdir=${ARCHIVE}/${1}/${YEAR} - dstfile=${dstdir}/`basename ${f}`.${DATE} - [ -d "${dstdir}" ] || mkdir -p ${dstdir} - archive_log ${f} ${dstfile} - else - echo "Skipping ${f}: not a file" 1>&2 - fi - done - else - echo "Skipping ${1}: not a file or directory" 1>&2 - fi - shift -done - -restart_syslog - -for log in ${LOGS}; do - gzip -f ${log} || myerror "Error while gzipping ${log}" - loggz="`basename ${log}`.gz" - ( cd `dirname ${log}` && openssl sha1 -out ${loggz}.sha1 ${loggz} ) -done +nice gzip -f "$_dest"