From bbf1e6a22b92adf692cfed5c719d2826585e5007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=E4kinen?= Date: Wed, 31 Aug 2011 11:33:29 +0300 Subject: [PATCH] Added logrotation to syslog::standalone --- CREDITS | 1 + syslog/files/logarchiver.sh | 64 +++++++++++++++++++++++++++++++++++++ syslog/manifests/init.pp | 18 +++++++++++ 3 files changed, 83 insertions(+) create mode 100755 syslog/files/logarchiver.sh diff --git a/CREDITS b/CREDITS index aaf38d6..986d8e8 100644 --- a/CREDITS +++ b/CREDITS @@ -11,3 +11,4 @@ Additional people who have contributed patches: Juhani Eronen Lari Huttunen Marko Laakso + Mikko Kenttälä diff --git a/syslog/files/logarchiver.sh b/syslog/files/logarchiver.sh new file mode 100755 index 0000000..34aa9c8 --- /dev/null +++ b/syslog/files/logarchiver.sh @@ -0,0 +1,64 @@ +#!/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 diff --git a/syslog/manifests/init.pp b/syslog/manifests/init.pp index 25fec01..7eaa66d 100644 --- a/syslog/manifests/init.pp +++ b/syslog/manifests/init.pp @@ -180,6 +180,24 @@ class syslog::standalone { target => "/srv/log/all.log", } + file { "/usr/local/sbin/logarchiver.sh": + ensure => present, + source => "puppet:///modules/syslog/logarchiver.sh", + mode => 0755, + owner => "root", + group => $operatingsystem ? { + "openbsd" => "wheel", + default => "root", + }, + } + cron { "logarchiver.sh": + command => "/usr/local/sbin/logarchiver.sh", + user => "root", + hour => 0, + minute => 0, + require => File["/usr/local/sbin/logarchiver.sh"], + } + case $syslog_type { "syslogd": { include syslog::standalone::syslogd } "rsyslog": { include syslog::standalone::rsyslog }