Celery Beat Not Running Tasks: A Troubleshooting Guide
No beat process, a queue no worker reads, an unregistered task, a schedule under the wrong setting name, or two beats. How to confirm each cause from logs and inspect commands, and fix it.
Blog · Page 2 of 6
Why scheduled jobs miss runs or fail silently, and how to catch it in the schedulers you already use.
No beat process, a queue no worker reads, an unregistered task, a schedule under the wrong setting name, or two beats. How to confirm each cause from logs and inspect commands, and fix it.
Certbot runs twice a day and usually does nothing, so a broken renewal can hide for weeks. The schedules, failure modes, hooks, tests, and a check-in that reports every run.
Configure triggers.crons, branch on controller.cron, know the CPU and 15-minute limits, test with wrangler dev, and get alerted when a scheduled Worker fails or never runs.
Coravel runs scheduled tasks in memory inside your app. How its ticks, cron dialect, Zoned(), and PreventOverlapping behave in 6.0.2, what it never tells you, and how to monitor each task.
Why a cPanel cron job that calls php gets the CGI build, which EasyApache 4 path to use instead, how to stop cron emails without losing errors, host limits, and check-ins.
Spring-forward skips an hour and fall-back repeats one. Which schedulers skip, delay, or double a job on those nights, checked against their source, and how to keep local-time jobs safe.
Cron runs jobs with a short PATH, /bin/sh, and none of your shell startup files. What each cron implementation sets, how crontab variables work, and how to test a job in cron's environment.
Cron works in whole minutes. Five ways to run work every 30 seconds, what each one does when a run overruns its slot, when a queue consumer beats a schedule, and how to monitor it per minute.
A grace period trades false alarms for detection time. Size it from measured run times and start delays, choose between start and completion check-ins, and see three worked examples.
Debian, Fedora, Alpine, and containers each run a different cron. Identify yours with two commands and see how they differ on variables, CRON_TZ, day fields, DST, percent signs, and output.
Cron daemons expect a server, not a container. Fix ignored signals, lost job output, and missing environment variables, or switch to supercronic, with three working images.
Alert on missed, failed, stuck, and bad-outcome runs, route by criticality and environment, name an owner per job, and cut the per-retry alerts, tight grace periods, and cron mail behind fatigue.
A nightly job that creeps from 10 minutes to 3 hours fails no check until it collides with the next run. Measure every run, read the trend in percentiles, and alert on the creep early.
Retries fix transient failures and can hide real ones. Choose what to retry, cap attempts and time, use Kubernetes and systemd retry settings correctly, and keep the final failure visible.
Two emails or duplicate rows usually mean two launchers. Sort the runs by timing, prove the cause with cron's log, ps, and a one-line run record, then make the job safe to run twice.
Diagnose a stuck cron job, set limits with GNU timeout, systemd, and Kubernetes activeDeadlineSeconds, kill children that escape, clean up on SIGTERM, and get alerted when a run hangs.
Five-field cron cannot say "last day of the month." The 28-31 date test, BSD and BusyBox variants, last weekday and first Monday, Quartz and systemd syntax, and how to monitor it.
Every job at 00:00 on every host makes one big spike. Spread the load with deliberate minutes, per-host offsets, random sleeps, cronie RANDOM_DELAY, systemd RandomizedDelaySec, and Jenkins H.
A job that never starts produces no error, no log line, and no failed health check. Seven scheduled-job failures mapped to the tool that sees each one, and how to combine them.
Debian and Ubuntu cron log this when a job prints output and no sendmail exists to mail it. Where the output went, how cronie and BusyBox differ, and how to keep, silence, or deliver it.