Latest

One small part per post: a probe, a daily job, a trick, a trap that cost an afternoon.

All posts

launchd, not cron, on a Mac

Scheduled jobs on a Mac belong in a launchd plist: they survive reboots, run as your user, and log where you can find them. One minimal plist, the commands to load it, and the privacy gotcha that makes a job under Documents fail with Operation not permitted.

Christian Drexler

One tag for all the worker machines

A few machines in my Tailscale network run unattended. Instead of naming each one in the access rules, they carry one tag, and the rules talk about the tag: who may reach them, on which ports, who may SSH in. Adding a machine stops being a policy edit.

Christian Drexler

One post a day from a cron job

A folder of source material, a scheduled job that turns one item into an article each morning and publishes it, and a human who reads every post for the first week before the job is allowed to run alone.

Christian Drexler

kickstart does not reload your plist

launchctl kickstart -k restarts a launchd job with the configuration it already has in memory. Edit the plist, kickstart, and the service comes back running the old settings while looking freshly restarted. How it bites and the two lines that fix it.

Christian Drexler