01.08.2011 00:31, Jeremy Chadwick пишет:
> On Sun, Jul 31, 2011 at 11:51:40PM +0700, Eugene Grosbein wrote:
>> Hi!
>>
>> Suppose, there is a machine which writes two kinds of log files through 
>> syslogd:
>> quickly-growing that need to be rotated based on their size (hourly is too 
>> seldom)
>> and other that should be rotated once a day, at midnight only.
>>
>> For first kind of logs we have to run newsyslog once every 5 minutes using 
>> cron:
>>
>> */5     *       *       *       *       root    newsyslog
>>
>> For second kind of logs we have lines in newsyslog.conf such as following:
>>
>> /var/log/mpd.log 640 16 * @T0000  JC
>>
>> This must ensure that /var/log/mpd.log is rotated and compressed at midnigt 
>> only.
>> Note, that compressing the file takes 8 minutes.
>>
>> However, every night at 00:05 I get an error:
>>
>> bzip2: I/O or other error, bailing out.  Possible reason follows.
>> bzip2: No such file or directory
>>      Input file = /var/log/mpd.log.0, output file = /var/log/mpd.log.0.bz2
>> newsyslog: `bzip2 -f /var/log/mpd.log.0' terminated with a non-zero status 
>> (1)
>>
>> It seems, newsyslog still wants to process my file at 00:05 despite @T0000
>> time specification. Is it broken?
> 
> I have three things to say on the matter, all of which are somewhat
> independent of one another so please keep that in mind.  I imagine #1
> below is your problem.
> 
> 1) The newsyslog.conf(5) man page has this clause in it, for the "when"
> field (in your case, @T0000):
> 
>      when    ...  If the when field contains an asterisk (`*'), log rotation
>              will solely depend on the contents of the size field.  Otherwise,
>              the when field consists of an optional interval in hours, usually
>              followed by an `@'-sign and a time in restricted ISO 8601 format.
> 
>              If a time is specified, the log file will only be trimmed if
>              newsyslog(8) is run within one hour of the specified time.  If an
>              interval is specified, the log file will be trimmed if that many
>              hours have passed since the last rotation. ...
> 
> You might think that "one hour of the specified time" value/clause
> correlates with the interval that newsyslog is run at via cron, but that
> would be wrong.  newsyslog REALLY DOES have hard-coded values for 3600
> seconds (1 hour) in it (grep -r 3600 /usr/src/usr.sbin/newsyslog).  I
> have not looked at the code, but the fact of the matter is, 1 hour
> appears to be a "special" value.  I would heed that as a warning.

After reading newsyslog code, now it's obvious it just ignores minutes and 
seconds
while making decision if a file should be rotated. It looks at hours only.
That's sad.

Eugene Grosbein
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to