Script I.1.3: Log File Rotation and Encryption

As before, but encrypts before it archives.

 #!/usr/local/bin/perl
 use POSIX 'strftime';
 
 $LOGPATH     = '/home/www/logs';
 $PIDFILE     = 'httpd.pid';
 $MAXCYCLE    = 4;
 $IDEA        = '/usr/local/ssl/bin/idea';
 $GZIP        = '/bin/gzip';
 $TAR         = '/bin/tar';
 $PASSWDFILE  = '/home/www/logs/secret.passwd';
 
 @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) {
     my $oldest = "$filename.$MAXCYCLE";
     archive($oldest) if -e $oldest and $ARCHIVE{$filename};
     for (my $s=$MAXCYCLE; $s--; $s >= 0 ) {
         $oldname = $s ? "$filename.$s" : $filename;
         $newname = join(".",$filename,$s+1);
         rename $oldname,$newname if -e $oldname;
     }
 }
 kill 'HUP',`cat $PIDFILE`;
 
 sub archive {
     my $f = shift;
     my $base = $f;
     $base =~ s/\.\d+$//;
     my $fn = strftime("$base.%Y-%m-%d_%H:%M.gz.idea",localtime);
     system "$GZIP -9 -c $f | $IDEA -kfile $PASSWDFILE > $fn";
     system "$TAR rvf $base.tar --remove-files $fn";
 }


<< Previous Contents >> Next >>

Lincoln D. Stein, lstein@cshl.org
Cold Spring Harbor Laboratory
Last modified: Mon Aug 17 10:40:15 EDT 1998