Date: Mon, 13 Nov 2000 10:17:10 -0500 From: Vivek Khera <khera@kciLink.com> To: freebsd-stable@FreeBSD.org Subject: Re: periodic and 310.accounting Message-ID: <14864.1526.589801.965839@onceler.kciLink.com> In-Reply-To: <200011122305.eACN5jB05000@hak.lan.Awfulhak.org> References: <tim@futuresouth.com> <20001112161701.A10495@futuresouth.com> <200011122305.eACN5jB05000@hak.lan.Awfulhak.org>
next in thread | previous in thread | raw e-mail | index | archive | help
>>>>> "BS" == Brian Somers <brian@Awfulhak.org> writes:
BS> I think it'd be nice if newsyslog could be told to ``just rotate this
BS> file with this number of backups with{,out} compression''. It can be
BS> given a file name, but still needs the config file to know when to
BS> rotate....
Here's a script I've used on other systems to rotate logs on demand.
It can optionally send a signal and then optionally compress the file.
I call it "logrotate" ;-)
--cut here--
#! /usr/bin/perl
use strict;
# Time-stamp: "12 July 1999, 15:55:00 (khera@kciLink.com)"
# $Id: logrotate.perl,v 1.3 1999/07/12 19:55:16 khera Exp $
# rotate log files and optionally send a signal (default is HUP) to
# the specified process ID, then optionally compress the newly rotated
# log file.
# Copyright 1999 Vivek Khera <vivek@khera.org>
use constant USAGE => "usage:rotatelogs [-z] [-p PID] [-s SIG] -r N file...\n";
use IO::File;
use Getopt::Std;
my %opt = ();
getopts('zp:s:r:',\%opt);
scalar(@ARGV) or die USAGE; # are there files specified?
die USAGE unless $opt{'r'};
# first rotate the files
foreach my $file (@ARGV) {
rotate ($file,$opt{'r'});
}
# now send the signal, if necessary. Default signal is HUP.
if ($opt{'p'}) {
my $sig = $opt{'s'} || 'HUP';
unless (kill $sig, $opt{'p'}) {
warn "Failed to send $sig to $opt{'p'}\n";
}
}
# and finally compress the newly rotated files, if requested
if ($opt{'z'}) {
foreach my $file (@ARGV) {
system "gzip $file.0";
}
}
# rotate the named log file and archive $howmany old versions. eg,
# rotate("foo",3);
# will move foo -> foo.0 -> foo.1 -> foo.2 -> foo.3
# and remove old foo.3, then create empty foo.
sub rotate ($$) {
my($file,$howmany) = @_;
my($cur);
return if ($howmany < 0);
unlink ("$file.$howmany","$file.$howmany.gz"); # remove topmost one.
for ($cur = $howmany; $cur > 0; $cur--) {
my $prev = $cur - 1;
rename("$file.$prev","$file.$cur") if (-f "$file.$prev");
rename("$file.$prev.gz","$file.$cur.gz") if (-f "$file.$prev.gz");
}
rename("$file","$file.0"); # move original one
# create the new one!
my $fh = new IO::File $file, O_WRONLY|O_CREAT, 0644;
$fh->close();
}
--cut here--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?14864.1526.589801.965839>
