Hello everyone,

I may have run into a corner case with newsyslog. Long story short, I set up 
a second pflog interface to capture all traffic coming to/from my phone to 
investigate an issue.

I want to keep 1-2 days of log. I have set-up /etc/newsyslog.conf as such:
/var/log/pflog1 600 24 * 2 ZB "rcctl reload pflogd1"

When I put my phone in offline mode at night, there's no traffic, so the only
mtime of the rotated files is its creation time. stat -f '%Sm%t%z%t%N' gives:

Oct  6 06:00:33 2024    44      pflog1.2.gz
Oct  6 05:00:33 2024    44      pflog1.3.gz
Oct  6 04:00:33 2024    44      pflog1.4.gz
Oct  6 03:00:34 2024    44      pflog1.5.gz
Oct  6 02:00:33 2024    44      pflog1.6.gz

I had included newsyslog -v in cron and the logs sent by cron are:
Date: Sun, 6 Oct 2024 02:00:02 +0200 (CEST)
/var/log/pflog1 <24ZB>: age (hr): 2 [2] --> trimming log....
Date: Sun, 6 Oct 2024 03:00:03 +0200 (CEST)
/var/log/pflog1 <24ZB>: age (hr): 2 [2] --> trimming log....
Date: Sun, 6 Oct 2024 04:00:02 +0200 (CEST)
/var/log/pflog1 <24ZB>: age (hr): 2 [2] --> trimming log....
Date: Sun, 6 Oct 2024 05:00:02 +0200 (CEST)
/var/log/pflog1 <24ZB>: age (hr): 2 [2] --> trimming log....
Date: Sun, 6 Oct 2024 06:00:02 +0200 (CEST)
/var/log/pflog1 <24ZB>: age (hr): 2 [2] --> trimming log....

So, it's always calculating 2 hours of duration (and trimming) although it's 
only
been one hour. This issue does not happen during the day when the logs are
being filled with data.

I'm no programmer, though looking through the source code of newsyslog shows
this formula: return ((int)(timenow - sb.mt_time + 1800) / 3600

If mt_time is the modification time, my only explanation is newsyslog is 
creating the file the same second, an hour later which would return 1.5:

$ bc -e "scale = 3; ($(date -j +"%s" 0600.33) - $(date -j +"%s" 0500.33) + 
1800) / 3600" -e quit
$ 1.500

And that this is rounded up to 2 hrs and triggers newsyslog... I am not sure
but cannot think of anything else

I think that I can work around this (and check the theory...) setting up another
cron job to touch /var/log/pflog1 every hour so that the mtime of the archive
cannot be exactly 5400 seconds later.
59      *       *       *       *       /usr/bin/touch /var/log/pflog1

Greetings,

Thomas

Reply via email to