Message: 11
Date: Thu, 23 Aug 2007 16:20:34 +0100
From: John Horne <john.horne@xxxxxxxxxxxxxx>
Subject: Re: Logrotate - daily log files for a month
To: For users of Fedora <fedora-list@xxxxxxxxxx>
Message-ID: <1187882434.2814.13.camel@xxxxxxxxxxxxxxxxxx>
Content-Type: text/plain
On Fri, 2007-08-24 at 00:34 +0930, Tim wrote:
> On Thu, 2007-08-23 at 15:27 +0100, John Horne wrote:
> > this does not account for month's of 31 days, or February with 28/29
> > days
>
> I'd guess that you'd have to do what banks do: Do your activities on
> the first of the month. If you do it close after midnight, you keep the
> last month's work, and start a new month's, hoping that you want nothing
> in the last few moments to be part of this month's data.
>
Not sure how this is going to help. How to do I configure this with
logrotate?
As far as I am aware logrotate runs daily, and since we want daily log
files I don't see how logrotate is going to know what a 'month' is on a
daily basis. I agree it knows what a 'month' is for monthly log file
rotation, simply because the month (name or number) changes.
What is needed it seems is logrotate to know that the month has changed,
but to keep to the daily log file rotation regardless of what 'rotate'
value is given. That way I get 31 log files for a 31-day month, 30 log
files for a 30-day month and so on.
John.
You will need a number of script files and logrotate files.
Then you set up a crontab (probably best as root) which checks at say
23:45 on the last day of each month, 28/29th, or 30th or 31st day
depending on the month value, in separate lines, and each calls a script
file which *substitutes* a new logrotate.conf file for the old one. Thus
every month the logrorate file which is used corresponds to the number
of required logging days.
Crontab will have 12 lines and will only need changing every 4th year
for February.
The crontab will look like:
45 23 5 31 * /usr/local/sbin/logrotate-30days # May 31 set logrotate
for 30 days for June
45 23 6 30 * /usr/local/sbin/logrorate-31days # June 30, set to 31
45 23 7 31 * /usr/local/sbin/logrotate-31days
45 23 8 31 * /usr/local/sbin/logrotate-30days
Or you could run them at 03 00 x 1 * that is, early on the first day.
A logrotate-xxdays file would just 'cp -f /etc/logrotatexx.conf
/etc/logrotate.conf'
It would also be possible to run a script to 'sed /s/30/31' against the
logrotate.conf but that seems to be overkill and hard for maintain.
It might also be possible to have a variable in a logrotate file (as in
'rotate $ROTATE_TIMES') but I did not bother to check that out. That
also would be harder to maintain as it is more obscure than just
changing the file.
For testing, I have things trigger every minute, but each called script
ends with a line '/usr/bin/aplay
/usr/share/sounds/KDE_Beep_something.wav so you hear a different sound
every minute, which tells you that a different test/script was run.
R. Geoffrey Newbury
Barrister and Solicitor
Suite 106, 150 Lakeshore Road West
Mississauga, Ontario, L5H 3R2
o905-271-9600 f905-271-1638
newbury@xxxxxxxxxxxx
Helping with the HTTP issue
<a href="http://www.w3.org/Protocols/">HTTP</a>