Blog
Notes on keeping scheduled jobs honest: why they fail quietly, how to tell when a run went wrong, and the schedule details that trip people up.
Browse by topic →September 27, 2026 · 6 min read
The pipeline that got slower every week
Four minutes in January, forty in April, a clean exit every night in between. Why gradual slowdown hides from monitoring, how to record run duration where a trend is visible, and how to alert on slower-than-usual.
September 21, 2026 · 6 min read
Cron monitoring without a dedicated tool: PagerDuty, Opsgenie, Sentry Crons compared
What PagerDuty, Opsgenie, and Sentry Crons actually do out of the box for a missed cron job, and where each one falls short of a dedicated monitor: pricing, native detection, alert gating, and Opsgenie's sunset date.
September 16, 2026 · 6 min read
Keep cron monitoring in the same repo as the cron jobs
Monitoring that lives in a dashboard drifts away from the jobs it watches: new jobs ship without a monitor, and changed jobs keep a stale one. Define the monitor as code, next to the schedule.
September 3, 2026 · 6 min read
Your scheduled AI agent can finish clean and still be wrong
An agent can post a confident summary and still have updated nothing, run out of turns mid-task, or burned the budget for no result. What to measure so the run's own numbers tell you.
September 1, 2026 · 7 min read
Watching dbt models without a data-observability platform
dbt already has tests and source freshness. What they cover, where they stop, and how to get a scheduled dbt build to page you when a test fails or the run goes missing, without adopting a profiling platform.
August 31, 2026 · 6 min read
The Airflow DAG succeeded and the table is three days stale
Every task in the DAG is green, and the model it builds hasn't updated since Tuesday. Why Airflow's success is orthogonal to data freshness, and how to check freshness without a data-observability platform.
August 28, 2026 · 7 min read
Catching the pipeline run that processed zero rows
A dbt build, an Airflow DAG, or a plain cron ETL can finish green and load nothing. How to make a zero-row run a failed run, without a data-observability platform.
August 21, 2026 · 6 min read
Scheduled job monitoring compared: illari, Healthchecks, Cronitor, Dead Man's Snitch
A comparison of the main heartbeat monitoring services for scheduled jobs, workers, and agent runs: pricing models, free tiers, self-hosting, whether they check the run or just the check-in, and where each one fits.
July 17, 2026 · 7 min read
Exit code 0 but the backup was empty: catching cron jobs that lie
A job can finish with exit code 0 and still have done the wrong thing: an empty dump, a partial sync, a half-written report. How to catch the runs that succeed on paper.
June 12, 2026 · 6 min read
How to know if your cron job silently failed
Cron won't tell you when a job stops running. Here's why scheduled jobs fail silently, and the practical ways to find out before it costs you.
April 8, 2026 · 7 min read
How cron handles timezones and daylight saving time
Cron runs in the system timezone. What that means at the spring-forward and fall-back transitions, how CRON_TZ and systemd timers change it, and why UTC is the safe default for scheduled jobs.
January 21, 2026 · 9 min read
Cron syntax: how to read and write a cron expression
The five fields, what each one accepts, the operators (* , - /), the day-of-month vs day-of-week trap, the @macros, and where other tools' cron dialects differ. With worked examples.
October 14, 2025 · 7 min read
A brief history of cron
Cron has scheduled Unix jobs since 1975. How it went from a single system table read once a minute to Vixie cron, cronie, systemd timers, and Kubernetes, and why the crontab format has barely changed.