If you've ever stared at "0 9 * * 1-5" and had to mentally reconstruct which field is which, you're not alone. Cron syntax is compact by design, which makes it great for config files and terrible for readability.
The real problems show up once you leave plain Linux crontab. GitHub Actions runs everything in UTC regardless of your repo's timezone, and it silently ignores any schedule more frequent than every 5 minutes, no error, it just won't fire as often as you asked. AWS EventBridge adds a 6-field format with seconds and year, plus its own rate() syntax. Kubernetes CronJobs look identical to standard 5-field cron but run in the pod's timezone, which defaults to UTC unless you set it explicitly.
Then there's the logic trap: when both the day-of-month and day-of-week fields are restricted at the same time, cron doesn't AND them together, it ORs them. So an expression meant to mean "first Monday of the month" actually fires on the 1st of the month OR every Monday, whichever comes first.
I put together a free Cron Expression Builder that translates any expression into plain English, shows your next 5 scheduled run times in your local timezone, and breaks down the platform-specific quirks above. I break down all of it here: https://devencyclopedia.com/tools/cron-builder
Top comments (0)