Script I.1.2: Log File Rotation and Archiving

As before, but oldest log is compressed into an archive.

 #!/usr/local/bin/perl
 $LOGPATH    = '/usr/local/apache/logs';
 $PIDFILE    = 'httpd.pid';
 $MAXCYCLE   = 4;
 $GZIP       = '/bin/gzip';

 @LOGNAMES=('access_log','error_log','referer_log','agent_log');
 %ARCHIVE=('access_log'=>1,'error_log'=>1);

 chdir $LOGPATH;  # Change to the log directory
 foreach $filename (@LOGNAMES) {
   system "$GZIP -c $filename.$MAXCYCLE >> $filename.gz" 
        if -e "$filename.$MAXCYCLE" and $ARCHIVE{$filename};
    die $! if $?;
    for (my $s=$MAXCYCLE; $s >= 0; $s-- ) {
        $oldname = $s ? "$filename.$s" : $filename;
        $newname = join(".",$filename,$s+1);
        rename $oldname,$newname if -e $oldname;
    }
 }
 kill 'HUP',`cat $PIDFILE`;


<< Previous Contents >> Next >>

Lincoln D. Stein, lstein@cshl.org
Cold Spring Harbor Laboratory
Last modified: Mon Aug 17 10:25:37 PDT 1998