syslogd: Re-write and simplify log rotate script
This commit is contained in:
parent
37c3ad0e27
commit
22cad61040
1 changed files with 20 additions and 69 deletions
|
@ -1,79 +1,30 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
LOGDIR="/srv/log"
|
set -eu
|
||||||
ARCHIVE="${LOGDIR}/archive"
|
|
||||||
|
|
||||||
DATE="`date +%Y-%m-%d`"
|
|
||||||
YEAR="`date +%Y`"
|
|
||||||
|
|
||||||
umask 027
|
umask 027
|
||||||
|
|
||||||
myerror()
|
_date="$(date +%Y-%m-%d)"
|
||||||
{
|
_logfile="/srv/log/all.log"
|
||||||
echo "Error: $*" 1>&2
|
|
||||||
|
_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
|
exit 1
|
||||||
}
|
fi
|
||||||
|
|
||||||
archive_log()
|
_dest="${_archivedir}/$(basename "$_logfile").${_date}"
|
||||||
{
|
[ -d "$_archivedir" ] || mkdir "$_archivedir"
|
||||||
FILE="${1}"
|
|
||||||
DEST="${2}"
|
|
||||||
|
|
||||||
if [ -f "${DEST}" -o -f "${DEST}.gz" ]; then
|
mv "$_logfile" "${_dest}"
|
||||||
echo "Skipping ${FILE}: Archive already exists" 1>&2
|
touch "$_logfile"
|
||||||
else
|
|
||||||
echo "Archiving file ${FILE} to ${DEST}"
|
|
||||||
mv "${FILE}" "${DEST}"
|
|
||||||
touch "${FILE}"
|
|
||||||
LOGS="${LOGS} ${DEST}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
restart_syslog()
|
kill -HUP "$(cat /var/log/syslog.pid)"
|
||||||
{
|
|
||||||
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}`
|
|
||||||
}
|
|
||||||
|
|
||||||
[ $# -gt 0 ] || myerror "Usage: `basename $0` <file|dir> [file|dir] ..."
|
nice gzip -f "$_dest"
|
||||||
|
|
||||||
[ -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
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue