Scheduled tasks

One cron entry runs fourteen background jobs. Without it, transactional email never leaves and unpaid orders are never cleaned up.

Admin → System → Scheduled tasks

  1. Copy the cron line shown on the screen.
  2. Add it to your host's scheduler, once every five minutes.
  3. Each job lists its last run so you can confirm it fired.
The scheduled tasks screen
The scheduled tasks screen. Click to enlarge.

Why this matters more than it sounds

Most of QuickMunch works without any scheduler. A few important things do not, and the most important of them is email: order confirmations, status updates and password resets are queued and then delivered by a scheduled job. If nothing calls the scheduler, that queue is never emptied and no transactional mail leaves the site at all.

So this is a five-minute job on install day, not an optional extra.

Set up the cron entry

In your hosting control panel, add one entry that runs every five minutes:

*/5 * * * *  /usr/bin/php /path/to/your/site/artisan schedule:run

Every job re-checks its own schedule, so a single five-minute entry is enough for all of them — the daily jobs still run once a day. You never need more than one cron line.

To check it by hand before you trust it:

php artisan qm:cron
No command-line access? The Scheduled tasks screen shows a tokenised web address that does the same thing. Point any web-cron service at it on the same five-minute schedule. Treat that address as a secret — anyone holding it can trigger your jobs.

What runs, and when

Six jobs are on from a fresh install. The rest ship off, because they email customers, publish content or delete history — none of which should start happening on a site you are still setting up. Turn each one on when you are ready for it.

JobRunsOn by defaultWhat it does
Email retryHourlyYesDelivers the transactional email queue and resends anything the mail server refused. This is how that mail leaves at all.
Expire subscriptionsDailyYesCloses subscriptions whose term has ended and tells the owner.
Renewal remindersDailyYesWarns restaurant owners before their subscription lapses.
Reconcile payments5 minutesYesRe-checks card and PayPal orders left unpaid and confirms any capture the browser return or webhook missed.
Disburse split payments5 minutesYesSends each restaurant its share of the orders you collected.
Confirm split payouts5 minutesYesPolls transfers the gateway is still processing and marks them paid, or flags a failure for review.
Scheduled order alerts5 minutesNoTells the kitchen when a pre-ordered ticket is nearly due.
Reservation remindersHourlyNoReminds guests of a booking the day before.
Cancel abandoned ordersHourlyNoCancels orders left unpaid at the payment step for more than a day.
Unfinished order remindersHourlyNoEmails a customer once about an order they left unpaid, between one and twenty hours after checkout.
Expire loyalty pointsDailyNoLapses balances with no activity for a year, recording the adjustment in the ledger.
Drip sequencesDailyNoSends the step that is due, and stops a sequence the moment somebody orders again or unsubscribes.
Scheduled publishing5 minutesNoPublishes blog posts whose time has arrived, then rewrites sitemap.xml.
Weekly performance reportWeeklyNoEmails last week's figures to the people you nominate.
Trim audit historyWeeklyNoDeletes audit entries, ad event records and run history older than a year, so no log grows forever.

How to tell it is working

The Scheduled tasks screen records every attempt: when it ran, how long it took, what it touched and whether it succeeded. A job you have not enabled is shown as skipped rather than failed, so an untouched install never looks broken.

Running too often is safe. Cheap hosts sometimes fire cron far more frequently than a job takes to finish. A second run is refused while the first still holds the job, and every job is written to be safe to repeat — it picks up the work still outstanding rather than assuming the last run finished.

When it doesn't work

Customers are not receiving order emails

Check Email retry first. If the scheduler is not running, mail sits in the queue and never leaves, however correct your SMTP settings are. Confirm your SMTP credentials on Email & templates second.

The screen shows no runs at all

The cron entry is not firing. Check the PHP path — many hosts need a specific binary such as /usr/local/bin/php82 rather than plain php — and confirm the path to artisan is absolute.

Payouts are stuck as pending

Disburse split payments and Confirm split payouts both need to be running. The first sends the money, the second confirms it arrived.