64 lines
1.6 KiB
Bash
Executable file
64 lines
1.6 KiB
Bash
Executable file
#!/bin/sh
|
|
ARCHIVEFILES="all.log"
|
|
LOGDIR="/srv/log"
|
|
DATE=`date +%Y-%m-%d`
|
|
YEAR=`date +%Y`
|
|
ARCHIVEDIR="/srv/log/archive/" #archivedlogs will be in this
|
|
#directory + $YEAR
|
|
umask 027
|
|
|
|
myerror(){
|
|
echo "Error: $*" 1>&2
|
|
exit 1
|
|
}
|
|
|
|
archive_log(){
|
|
FILE="${1}"
|
|
DEST="${2}"
|
|
|
|
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
|
|
}
|
|
|
|
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" 1>&2
|
|
fi
|
|
kill -HUP `cat ${PIDFILE}`
|
|
}
|
|
archive(){
|
|
[ -d ${LOGDIR} ] || myerror "No such direcroty: ${LOGDIR}"
|
|
[ -d "${ARCHIVEDIR}" ] || myerror "No such archive directory: ${ARCHIVEDIR}"
|
|
[ -d "${ARCHIVEDIR}/${YEAR}" ] || mkdir ${ARCHIVEDIR}/${YEAR}
|
|
ARCHIVEDIR="${ARCHIVEDIR}/${YEAR}"
|
|
|
|
for logfile in ${ARCHIVEFILES} ; do
|
|
[ -f "${LOGDIR}/${logfile}" ] || myerror "File not found: ${logfile}"
|
|
archive_log "${LOGDIR}/${logfile}" "${ARCHIVEDIR}/${logfile}.${DATE}"
|
|
done
|
|
restart_syslog
|
|
for zipfile in ${ARCHIVEFILES} ; do
|
|
gzip -f "${ARCHIVEDIR}/${zipfile}.${DATE}" || myerror "Error while gzipping ${ARCHIVEDIR}/${zipfile}"
|
|
done
|
|
}
|
|
|
|
case "x$1" in
|
|
"x-v"|"x--verbose")
|
|
archive
|
|
;;
|
|
*)
|
|
archive >> /dev/null
|
|
;;
|
|
esac
|