John W. Krahn wrote:
Aruna Goke wrote:
I put up a small script to delete old logs and at the same time rotating
the logs. on my squid log directory ( I can use logrorate and unlink the
logs, but I choose to test my ability to do that)

however, with my code below, I can see delete the old logs, however, the
output of the log the squid rotated is not included when the unlink is
being executed.

after runing the script, I will still find the newly rotated logs like
access.log.0, store.log.0 etc in the directory.

I will be glad for any assisstance including hash comment

#!/usr/bin/perl
#
use warnings;
use strict;
use diagnostics;
use Time::HiRes;
#
my ($fname, @si);
##read the content of the directory and check there sizes.
opendir DIR, '/var/log/squid' or die "ko ri direk3 si: $!";
while($fname=readdir(DIR)){
    my @si = stat($fname);

You are trying to stat() a file in the current directory but the file is
actually in the /var/log/squid directory:

    my @si = stat "/var/log/squid/$fname";


        next, if $fname=~m/^[\.|\.\.]/;

You are using a character class so duplicate characters are ignored and only
the two characters '.' and '|' are included so that could be simplified to:

        next if $fname =~ /^[.|]/;

Although you probably meant to use alternation instead:

        next if $fname =~ /^(?:\.|\.\.)/;

But even there the second alternative will *never* match so you could simplify
that to:

        next if $fname =~ /^\./;

Although what you *really* want would be something like:

        next if $fname =~ /\A(?:\.|\.\.)\z/;

Or:

        next if $fname =~ /\A\.\.?\z/;

Or:

        next if $fname eq '.' or $fname eq '..';


        system("squid", "-k", "rotate"), if ($si[7]=~/[1-9]\d{6,}/ &&

Why the regular expression?  Why not just:

        system( 'squid', '-k', 'rotate' ) if $si[ 7 ] > 999_999 &&

Or just use the file test -s:

        system( 'squid', '-k', 'rotate' ) if -s "/var/log/squid/$fname" >
999_999 &&


$fname=~/^([a-z]+\.log)$/);

You are not using the contents of $1 so why are you using capturing parentheses?


        unlink $fname, if $fname=~m/(\S{3,}\.){2,3}/;

You are trying to unlink() a file in the current directory but the file is
actually in the /var/log/squid directory:

        unlink "/var/log/squid/$fname" if $fname =~ /(?:\S{3,}\.){2,3}/;


}



John

Thanks John,

actually the script is placed in the /var/log/squid directory and the unlink is actually deleting the old logs.

however, the output of the system('squid' '-k', 'rotate') is access.log.0, store.log.0 and these were not included when the unlink is executed. therefore running the script twice will do the deletion but i guess running it once suppose to do the job.

thanks.

Goksie





--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to