#! /bin/sh -e # enables running as # $ DEBUG=yes lr_vendor_cron daily # DEBUG=${DEBUG:-no} # syslog(3) messages priority, logger's -p flag. ``facility.level'' # running e.g. # PRIORITY=local2.info lr_vendor_cron daily # enables nice lire-specific logfile creation. # # daemon.info might be ok as a default too. PRIORITY=${PRIORITY:-user.info} # user to su to, and invoke lr_log2mail LIREUSER=${LIREUSER:-lire} debug () { test "$DEBUG" = "yes" && echo 2>&1 $PROGRAM: "$@" return 0 } PROGRAM=lr_vendor_cron if test $# -ne 1; then echo >&2 "Usage $PROGRAM daily/weekly/monthly" exit 1 fi target=$1 for d in /etc/sysconfig/lire.d /etc/default/lire.d do test -d $d && CONFDIR=$d && break done if test -z "$CONFDIR" then debug "Configuration directory CONFDIR not found" exit 0 fi if ls -- $CONFDIR/*.cfg > /dev/null 2>&1 then : else debug "No log configuration files in $CONFDIR" exit 0 fi for f in $CONFDIR/*.cfg do name=`basename $f` if test ! -r $f then debug "can't read $f" continue fi # Reset variables daemon= service= logfile= filter= rotateperiod= extraopts= . $f test -z "$daemon" && debug "daemon isn't set in $f" && continue test -z "$service" && debug "service isn't set in $f" && continue test -z "$logfile" && debug "logfile isn't set in $f" && continue test -z "$rotateperiod" && debug "rotateperiod isn't set in $f" && continue test -z "$filter" && filter="cat" # Check to see if the daemon is present. No point in generating # reports which will be empty because there is no application # to generate logs if test ! -x $daemon then debug "Daemon $daemon, as listed in $name, is not present on the system" continue fi if test "$target" != "$rotateperiod" then debug "Skipping $name since we are not in the $rotateperiod run" continue fi if test ! -r $logfile then debug "Skipping $name since logfile $logfile doesn't exists." continue fi debug "Sending $rotateperiod $service report from $logfile to root" # use "su -": make sure LIREUSER will be in its own HOME, so that it can # savely do: o=`pwd`; cd foo; cd $o. Scripts like lr_xml2pdf need a cwd # to which can get cd-ed. # better use sudo, if available? eval "$filter" < $logfile | \ su - $LIREUSER -c \ "lr_log2mail -s '$rotateperiod $service report from $logfile' $extraopts $service root" 2>&1 | logger -p $PRIORITY -t lire done exit 0 POD=<<'EOPOD' =head1 NAME lr_vendor_cron - generate Lire reports from all known log files on the system =head1 SYNOPSIS B IB<|>IB<|>I =head1 DESCRIPTION B is designed to be invoked by cron. On systems supporting /etc/cron.d/, this script can be invoked by creating /etc/cron.d/lire, which should read e.g.: 02 5 * * * root /usr/sbin/lr_vendor_cron daily 22 5 * * 0 root /usr/sbin/lr_vendor_cron weekly 42 5 1 * * root /usr/sbin/lr_vendor_cron monthly B reads files /etc/sysconfig/lire.d/*.cfg and /etc/default/lire.d/*.cfg. For each log file, such a file should exist. The files should set the following shell variables: =over 4 =item daemon the name of a binary which generated the specific log. This is used to test wether the *.cfg-file is suitable for the current system. If you'd like to generate a log for which no daemon is present on the current system, just use a placeholder like "daemon=/bin/true". =item service a Lire service, e.g. sendmail, =item logfile e.g. /var/log/mail.log.1.gz, =item filter e.g. 'gzip -dc' or 'zcat | grep sendmail', and =item rotateperiod one of the supported lr_vendor_cron arguments. =item extraopts optional: extra options passed to lr_log2mail(1). Set this to e.g. '--template www_local'. =back After parsing the configuration files, B invokes lr_log2mail(1) on the `filter'ed log file. Reading and filtering the log is done as root, lr_log2mail is run as user lire, using su(1). Output is fed to logger(1). =head1 SECURITY B is supposed to be run as root. However, please note that this script is distributed WITHOUT ANY WARRANTY. If you don't like to run such a script as root, make sure your lire user has read access to all log files you'd like to get processed, and adapt this script. We supply this script mainly for people building packages. On many Unix and GNU/Linux distributions, it's hard to enforce log file readability by the lire user. This script is mainly a way to work around this. =head1 ENVIRONMENT VARIABLES B honours DEBUG, CONFDIR, PRIORITY (for logger(1) call), and LIREUSER. Beware! PRIORITY as used here is independent of the LR_FACILITY as set in /etc/lire/defaults. This script does not use any of the settings in /etc/lire/defaults. =head1 VERSION $Id: lr_vendor_cron.in,v 1.14 2006/07/23 13:16:33 vanbaal Exp $ =head1 COPYRIGHT Copyright (C) 2002, 2003 Stichting LogReport Foundation LogReport@LogReport.org Copyright (C) 2005 Joost van Baal This program is part of Lire. Lire is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program (see COPYING); if not, check with http://www.gnu.org/copyleft/gpl.html. =head1 AUTHORS Francis J. Lacoste , Joost van Baal =cut EOPOD