Archives February 2021

What the Hell Is Up With MacOS Periodic Jobs?

Yesterday, Feb. 25 at 13:19, my Mac ran periodic monthly. I thought it odd that this would run on the 25th rather than the 1st of the month, and in the afternoon rather than late at night, so I dug a little deeper.

It looks as though Apple now deprecates cron in favor of launchd agents. Okay, fine. Yeah, I see that there are three periodic jobs:

> launchctl list | grep periodic-
-	-9	com.apple.periodic-monthly
13804	0	com.apple.periodic-weekly
-	-9	com.apple.periodic-daily

launchctl print system/com.apple.periodic-monthly shows details about the monthly job:

event triggers = {
        com.apple.periodic-monthly => {
                keepalive = 0
                service = com.apple.periodic-monthly
                ...
                descriptor = {
                        "Repeating" => true
                        "GracePeriod" => 14400
                        "Interval" => 2629746
                        ...

Nowhere does it say to run this job at a particular time on a particular day. Rather, as far as I can tell, it wants to run every 2629746 seconds. What’s that?

launchctl print system/com.apple.periodic-daily shows

"Interval" => 86400

which makes perfect sense, since 86400 is 60 × 60 × 24, the number of seconds in a day. And com.apple.periodic-weekly runs every 60 × 60 × 24 × 7 = 604800 seconds.

But 2629746, the monthly interval, is 43829.1 minutes = 730.485 hours = 30.4368 days. What the hell is that?

I note that the average month length in a year is 365/12 = 30.4166 days, which is close. And what with leap years, the average year is really 365.25 days long; 365.25/12 = 30.4375, which is close to the periodic-monthly interval. So maybe Apple took the length of the average century, when all leap days, century non-leap days, and millennial non-non-leap days are taken into account, and divided by the number of months in a century? Or something else? Who knows?

Maybe Apple has decided that it doesn’t matter when accounting and log-rotation jobs run, and that it’s okay for them to drift. Fine. Except that the simplest and easiest documented way of adding your own periodic jobs is to add a file to /etc/periodic/daily, /etc/periodic/weekly, or /etc/periodic/monthly. And people might want resource-intensive cleanup jobs to run in the middle of the night, and for reports to run on the first of the month. So what the hell, Apple?

Grand Reopening

A while back, I figured my site needed a bit of a facelift. So here it is. I’ve moved my posts from Epsilon Clue to here, and I plan on posting at ooblick.com rather than there.

Obviously, any time you move from one site to another like this, there’s the risk that people won’t follow you to the new site. To prevent this, I waited until no one was reading me there, so no one was affected by the move.

If you’ve somehow stumbled on this post in the future, be sure to update your RSS feeds, or whatever our robot overlords have replaced them with.