The attached patch to the sh.rotate script sets an environment
variable ROTATE_LOGFILE with the name of the current file being
processed before invoking the epilog or prolog programs. This
permits the epilog/prolog script to do things such as calling
webalizer to process the file being rotated.
The problem is that defining multiple log files in the rc.conf
file with lines like the follow cause the epilog/prolog programs
to be execute multiple times without knowledge of which file is
being processed.
apache_log_files="/opkg/var/apache/log/*access*log"
I first tried having the sh.rotate script add an argument to the
eval of the epilog/prolog command, but this does not work when
the command is compound as in the rc.apache daily processing:
-E "${apache_log_epilog} && rc apache reload"
Creating a new environment variable avoids this problem and
cannot break any existing epilog/prolog programs as they will not
be aware of the variable.
Bill
--
INTERNET: [EMAIL PROTECTED] Bill Campbell; Celestial Software LLC
URL: http://www.celestial.com/ PO Box 820; 6641 E. Mercer Way
Voice: (206) 236-1676 Mercer Island, WA 98040-0820
Fax: (206) 232-9186
Breathe fire, slay dragons, and take chances. Failure is temporary, regret
is eternal.
--- sh.rotate.orig 2008-04-02 13:10:17.000000000 -0700
+++ sh.rotate 2008-09-19 11:48:40.504881762 -0700
@@ -205,6 +205,10 @@
if [ ".$opt_t" = .yes ]; then
echo "$opt_P"
fi
+ # pass current log file name to prolog
+ # prolog cannot be handed an argument as it may be
+ # called as "prolog && something"
+ ROTATE_LOGFILE="$ldir/$file"; export ROTATE_LOGFILE
eval $opt_P
[ $? -ne 0 ] && shtool_exit $?
fi
@@ -394,6 +398,10 @@
if [ ".$opt_t" = .yes ]; then
echo "$opt_E"
fi
+ # pass archive file name to epilog command
+ # epilog cannot be handed an argument as it is often
+ # called as "epilog && something"
+ ROTATE_LOGFILE="${adir}/${file}.${n}"; export ROTATE_LOGFILE
eval $opt_E
[ $? -ne 0 ] && shtool_exit $?
fi