in reply to Simple Log Rotate Problem

update: it looks like you are trying to move the $out file to the $old file, but you're not deleting the $old file first. Then you are trying to unlink() the $out file, but if the mv() succeeded, it would fail anyway.

Try this:

my $dir = "H:/vpn/"; my $out = "H:/vpn/vpnwarn.out"; my $old = "H:/vpn/vpnwarn.old"; if (-e $old) { unlink($old) || die ("Could not unlink: $!"); } if (-e $out) { mv ($out, $old) || die ("Could not mv: $!"); } # create and write new $out here

Replies are listed 'Best First'.
Re: Re: Simple Log Rotate Problem
by monger (Friar) on Nov 13, 2003 at 21:57 UTC
    So what you're really saying is your unlink() call is not succeeding? try this: if (-s $out) { mv ($out, $old) || die ("Could not mv: $!"); unlink ($out) || die ("Could not unlink: $!"); } And see why the unlink() call is failing.

    The unlink is failing. Sorry for not pointing that out earlier. The return is: Can't unlink file: No such file or directory at ./vpnwarn.pl line 28. However, the file does exist. If I delete both of the log files, .old and .out, and run the script, the first time it succeeds, the second it fails with the above error.

    Hope that sheds some more light.

    Monger

      Try this:
      my $dir = "H:/vpn/"; my $out = "H:/vpn/vpnwarn.out"; my $old = "H:/vpn/vpnwarn.old"; if (-e $old) { unlink($old) || die ("Could not unlink: $!"); } if (-e $out) { mv ($out, $old) || die ("Could not mv: $!"); } # create and write new $out here
        Try this:
        my $dir = "H:/vpn/"; my $out = "H:/vpn/vpnwarn.out"; my $old = "H:/vpn/vpnwarn.old"; if (-e $old) { unlink($old) || die ("Could not unlink: $!"); } if (-e $out) { mv ($out, $old) || die ("Could not mv: $!"); } # create and write new $out here
        mmetraz, Thanks for the suggestion. I looked at it, tried it, and found my error. I was writing the .out and .old files to the same directory to which I was writing. So, each pass through the directory yielded a doubling of the size of the .out, and a corresponding increase in the .old. I did the quickest thing I could now: dropped the .out and .old to a different directory. However, I'll try to look at filtering my directory read better later.

        Thanks to all the monks who offered helped! I've looked at all your suggestions, and learned from each!

        monger