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

Reply via email to