diff options
Diffstat (limited to 'system/sysklogd/sysklogd.daily')
-rwxr-xr-x | system/sysklogd/sysklogd.daily | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/system/sysklogd/sysklogd.daily b/system/sysklogd/sysklogd.daily new file mode 100755 index 000000000..725c33e31 --- /dev/null +++ b/system/sysklogd/sysklogd.daily @@ -0,0 +1,91 @@ +#!/bin/sh +# This is a shell script replacement for the sysklogd's logrotate cron script +# and syslogd-listfiles perl script. +# Copyright (C) 2008-2015 N. Angelacos for the Alpine Linux project - GPL2 + + +CONF="/etc/syslog.conf" + + +syslogd_listfiles() { + # List the target files from syslog.conf + + local skip= + [ "$1" = "--auth" ] && skip="!" + + # the while loop joins lines that end in "\" + # the sed (in order)- + # strips comments; + # remove empty lines; + # collapses spaces/tabs to 1 space; + # deletes the "-" in front of the filename; + # deletes whitespace before ';' + # deletes lines that have/dont have the "auth" facility + # deletes the facility (leaving just the filename) + # deletes lines that are not filenames with leading "/" + # print it + while read a ; do echo "$a"; done < $CONF |\ + sed -nE -e "s/\#.*//" \ + -e "/^[[:space:]]*$/D" \ + -e "s/[[:space:]]+/ /g" \ + -e "s: -/: /:g" \ + -e "s/ *; */;/" \ + -e "/^.*(auth)[^ ]* /${skip}D" \ + -e "s:^.* /:/:" \ + -e "/^[^\\/]/D" \ + -e "P" \ + | sort | uniq +} + +# dumb little savelog - no error checking here +savelog () { + local group="adm" + local mode="644" + local user="root" + local cycle=2 + local logfile="" + + # parse args + while getopts "g:u:m:c:" opt; do + case $opt in + g) group=$OPTARG ;; + u) user=$OPTARG ;; + m) mode=$OPTARG ;; + c) cycle=$OPTARG ;; + *) echo "unknown option: $opt" >&2 && return 1;; + esac + done + shift $(( $OPTIND - 1 )) + logfile=$1 + + # Cycle the logs + while [ $cycle -ne 0 ]; do + p=$cycle + cycle=$(( $cycle - 1 )) + a=$logfile.$cycle* + b=$( echo $a | sed "s/\.$cycle/\.$p/") + [ -f $a ] && mv $a $b + done + + # compress .1 and let .0 be uncompressed + [ -f $logfile.1 ] && gzip $logfile.1 + [ -f $logfile ] && mv $logfile $logfile.0 + + # set permissions + chown $user:$group $logfile.* 2>/dev/null + chmod $mode $logfile.* 2>/dev/null +} + + +# Main script + +for LOG in $( syslogd_listfiles ); do + [ -f $LOG ] && savelog -g adm -m 640 -u root -c 7 $LOG +done + +for LOG in $(syslogd_listfiles --auth); do + [ -f $LOG ] && savelog -g adm -m 640 -u root -c 7 $LOG +done + +killall -HUP syslogd + |