Is it running?
Open Settings Security Logs Cron Logs and look at Cron last ran.
| It says | Meaning |
|---|---|
| "running every minute" | All good. If one feature still doesn't work, look at that job's own runs below. |
| "Cron has never run on this site" | The task was never set up, or it can't reach the store. Set it up as in Scheduled tasks. |
| "late: over 10 minutes ago" | It ran before but has stopped. Something changed at your host: a moved site, a new PHP version, a changed key. |
Runs you start by hand with Run now don't count here: only the scheduled task does.
If you call a URL
Hosts that can only call a web address, and outside cron services, use the cron URL from Cron URL, command and key on Cron Logs. Open that URL in your browser yourself:
| You see | What to do |
|---|---|
Lines starting with [dispatch], or "[dispatch] nothing due." | The URL works. Check the cron service really calls it every minute, and that it calls exactly this URL. |
| "Forbidden — set CRON_KEY in .env and pass ?key=…" | The key in the URL doesn't match your store's. Copy the URL again from Cron Logs. If someone pressed New key, the old URL stopped working. |
Only an Administrator can see or change the key. If Cron Logs says the key could not be saved, PHP can't write to your .env file.
If you run a command
The command on Cron Logs has your site's real path in it. If you moved the site, copy it again. Then run it once yourself from a shell, without the part after dispatch.php, to see what it prints:
php /path/to/your/site/cron/dispatch.php| It prints | What to do |
|---|---|
A line for each job, such as [dispatch] process_queue: ok, or "nothing due" | The command works. Check the cron entry is set to every minute and uses exactly this command. |
| "This site needs PHP 8.2 or newer" | The php your shell and cron use is older than the one your site runs on. Use the full path to a PHP 8.2 or newer program, as your host names it, in the cron line. |
The cron line itself throws its output away (>/dev/null 2>&1), which is why errors only show when you run it by hand.
One job doesn't run
Cron Logs lists every job with when it last ran and when it runs next, and the run history with failures first. If one job never runs while others do:
- Check its schedule: someone may have switched it off or set it to Manual only.
- Open its failed runs: each one shows the error.
- Press Run now to try it straight away.
Upgraded from an older version?
Older guides had one cron line per script. Those still work, but the single dispatch.php line replaces all of them, so you only need that one.
Something wrong or unclear on this page? Tell us at [email protected], or see how to get help.