@reboot in Cron: How It Works and Why It Fails
@reboot runs when the cron daemon starts, not when the system is ready. What cronie, Debian cron, and BusyBox actually do, why boot jobs fail, and when a systemd unit is the better tool.
Blog · Page 3 of 6
Why scheduled jobs miss runs or fail silently, and how to catch it in the schedulers you already use.
@reboot runs when the cron daemon starts, not when the system is ready. What cronie, Debian cron, and BusyBox actually do, why boot jobs fail, and when a systemd unit is the better tool.
Cron checks the crontab file, not what it runs. Run jobs unprivileged, find root jobs that other accounts can modify, keep secrets out of crontab lines, and audit cron for persistence.
Which shell /bin/sh really is, where set -e quietly stops applying, exit code conventions, EXIT and TERM traps, logs that survive logrotate, and a complete template with check-ins.
Which time zone cron uses, why TZ= in a crontab never moves the schedule, where CRON_TZ works, the tzdata traps in containers, and how to diagnose a job that runs hours off.
crontab -r deletes without asking, and crontab file replaces everything. Edit, back up, and restore crontabs safely, and find every cron job on a Linux server.
Hand-edited crontabs have no history, no review, and vanish when a server is rebuilt. Put them in git, deploy whole files, lint them in CI, and catch edits made on the server.
Datadog has no heartbeat monitor type, but metrics, service checks, logs, and Kubernetes state can stand in. What each catches, why a rolling window isn't a schedule, and what it costs.
Dead Man's Snitch checks each snitch once per fixed UTC interval; CronRadar expects each run at its cron time plus grace. Features, pricing checked October 25, 2026, and a migration path.
Copy a crontab to three servers and the job runs three times; keep it on one and it stops when that server does. Six architectures compared on single runs, failover, and cost.
Run a recurring task in ASP.NET Core or a worker service without Hangfire or Quartz.NET, including what tutorials skip: exceptions that stop the host, overlap, scale-out, and shutdown.
Most ETL failures exit 0: zero rows, a half-loaded window, duplicates from a retry, a stale source. What to measure on every run, how to reconcile it, and why freshness needs its own check.
Scheduled workflows run in UTC from the default branch, can start late or be dropped, and stop after 60 quiet days in public repos. The causes, the fixes, and a workflow that checks in.
robfig/cron v3 and gocron v2 on specs, time zones, panics, overlap, shutdown, and replicas, a v3.0.1 wrapper-order trap, and HTTP check-ins that report every Go job run.
Unix-cron schedules, attempt deadlines that cancel the request but not the work, retryConfig, duplicate deliveries, Cloud Run jobs, and check-ins that report each run from inside the job.
Hangfire's default 10 retries span more than four hours. Configure AutomaticRetry per job or globally, keep retries from colliding with recurring runs, and alert when the last attempt fails.
Exact Hangfire 1.8 cron syntax, what each Cron helper returns, how RecurringJobOptions.TimeZone resolves on Windows and Linux, and what happens when daylight saving skips or repeats an hour.
DisableConcurrentExecution makes a second run wait while holding a worker, then fail and retry. What it locks on each storage, how to skip a run instead, and when a one-worker queue fits.
What Processing means in Hangfire storage, how SQL Server and Redis requeue a job after a crash or deploy, why some jobs really hang, and how to recover without running work twice.
Why a Hangfire recurring job does not fire or execute, the dashboard check that confirms each cause, and how to get alerted the next time a scheduled run never happens.
Hangfire persists every job, Quartz.NET persists schedules only if you configure it, and BackgroundService persists nothing. A sourced comparison, the pitfalls of each, and when to pick which.