my $MAXSIZE = 1024*1024; my $DEBUG = 0; sub RotateLog { my $filename = shift; my $MAXCYCLE = shift || 10; if ( -e "$filename.$MAXCYCLE" ) { foreach my $gz ( '/bin/gzip', '/usr/bin/gzip', '/usr/local/bin/gzip', undef ) { last if ( not defined $gz ); if ( -x $gz ) { system("$gz -c $filename.$MAXCYCLE >> $filename.gz"); last; } } } for ( my $s = $MAXCYCLE - 1 ; $s >= 0 ; $s-- ) { my $oldname = $s ? "$filename.$s" : $filename; my $newname = join( ".", $filename, $s + 1 ); if ( -e $oldname ) { warn("RotateLog: $oldname--\>$newname\n") if $DEBUG; rename( $oldname, $newname ) or warn("RotateLog: $oldname not renamed to $newname\n"); } } 1; } ... # irgendwo im Skript my ($fsz) = (stat($logfile))[7]; RotateLog($logfile) if ( $fsz >$MAXSIZE );