crontool
Paste a schedule, read it in English, see the next runs.

Cron Job Not Running: A 7-Point Checklist

When a cron job never fires, the cause is almost always one of seven things: the crontab was never saved, the cron daemon is stopped, the schedule fields are wrong, the last line has no trailing newline, paths are relative, it is in the wrong user's crontab, or the command fails silently. Work down this list.

Run this checklist in order

  1. Is it actually installed? Run crontab -l. If your line is not there, you edited a file but never saved with crontab -e.
  2. Is cron running? systemctl status cron (Debian/Ubuntu) or systemctl status crond (RHEL/Fedora). Start it with systemctl start cron.
  3. Are there exactly 5 time fields? A line needs minute hour day-of-month month day-of-week command. A miscount silently shifts your command into a time field.
  4. Trailing newline. The last crontab line must end with a newline or it is ignored. crontab -e adds it; hand-written files often miss it.
  5. Use absolute paths. Cron does not load your shell profile. Write /usr/bin/python3 /home/me/job.py, not python3 job.py.
  6. Right user. A job in your user crontab runs as you; a job in /etc/crontab or /etc/cron.d needs a user column. Root's crontab is separate.
  7. Read the log. grep CRON /var/log/syslog shows every attempt. No line there means cron never triggered; a line there means your command ran but failed — check its own output.

Fastest single test

Add * * * * * /bin/echo hi >> /tmp/cron.log 2>&1, wait one minute, and check /tmp/cron.log. If it fills, cron works and the problem is in your command; if it stays empty, the problem is cron/crontab itself.

FAQ

Why is my cron job not running at all?

Most often the crontab was never saved, the cron service is stopped, or the last line lacks a trailing newline. Confirm with crontab -l and systemctl status cron.

How do I check if cron even tried to run my job?

Run grep CRON /var/log/syslog (Debian/Ubuntu) or check journalctl -u crond. A log line means cron fired and the command failed; no line means the schedule or crontab is wrong.

My command works in the terminal but not in cron. Why?

Cron runs with a minimal environment and does not source your profile, so relative paths and shell aliases break. Use absolute paths and redirect output to a log to see the error.