#!/bin/sh # # rotatelogs - rotate log files (local host) # BACKUP_LOGDIR="/var/log/backup" LOGDIR_GLOBAL=/var/log LOGFILES_GLOBAL="auth.log clamd.log freshclam.log cron.log daemon.log kern.log mail.log procmail.log scrollkeeper.log sys.log user.log xdm.log Xorg.0.log" LOGDIR_APACHE=/var/log/apache LOGFILES_APACHE="access_log error_log ssl_request_log" LOGDIR_CUPS=/var/log/cups LOGFILES_CUPS="access_log error_log" LOGDIR_NAMED=/srv/named/etc/namedb LOGFILES_NAMED="named.run" # arg 1: Backup log directory # arg 2: log filename rotate_log() { backup_log_dir=${1} file=${2} for day in 8 7 6 5 4 3 2 1 0 ; do if [ -f ${backup_log_dir}/${file}.${day} ]; then mv ${backup_log_dir}/${file}.${day} ${backup_log_dir}/${file}.$((${day}+1)) || exit 1 fi done if [ -f ${file} ]; then user=$(ls -l --numeric-uid-gid ${file} | awk '{ print $3 }') group=$(ls -l --numeric-uid-gid ${file} | awk '{ print $4 }') cp -a ${file} ${backup_log_dir}/${file}.0 || exit 1 fi # Empty file cp /dev/null ${file} && chown ${user}.${group} ${file} && chmod 640 ${file} return $? } if [ ! -d ${BACKUP_LOGDIR} ]; then mkdir ${BACKUP_LOGDIR} fi # syslogd files LOGDIR=${LOGDIR_GLOBAL} cd ${LOGDIR} && for file in ${LOGFILES_GLOBAL}; do rotate_log ${BACKUP_LOGDIR} ${file} || exit 1 done kill -HUP `cat /var/run/syslogd.pid` && # named (BIND) server log files (if installed) LOGDIR=${LOGDIR_NAMED} if [ -d ${LOGDIR} ]; then cd ${LOGDIR} && for file in ${LOGFILES_NAMED}; do rotate_log ${BACKUP_LOGDIR} ${file} || exit 1 done kill -HUP `cat /srv/named/var/run/named.pid` || exit 1 fi # For Apache web server (if installed) LOGDIR=${LOGDIR_APACHE} if [ -d ${LOGDIR} ]; then if [ ! -d ${BACKUP_LOGDIR}/apache ]; then mkdir -p ${BACKUP_LOGDIR}/apache fi cd ${LOGDIR} && for file in ${LOGFILES_APACHE}; do rotate_log ${BACKUP_LOGDIR}/apache ${file} || exit 1 done /usr/sbin/apachectl graceful && sleep 2 fi # For CUPS LOGDIR=${LOGDIR_CUPS} if [ -d ${LOGDIR} ]; then if [ ! -d ${BACKUP_LOGDIR}/cups ]; then mkdir -p ${BACKUP_LOGDIR}/cups fi cd ${LOGDIR} && for file in ${LOGFILES_CUPS}; do rotate_log ${BACKUP_LOGDIR}/cups ${file} || exit 1 done fi exit $?