Skip to content

Scheduled tasks

Four jobs that need cron, and what silently stops working without it.

1 min read

Several things happen on a schedule. They all depend on one cron entry, and it is the step most often skipped during setup.

The cron entry#

* * * * * cd /path/to/panel && php artisan schedule:run >> /dev/null 2>&1

One entry, every minute. Laravel decides internally what is actually due. In cPanel this goes in Cron Jobs with the interval set to once per minute.

What runs#

Job When What it does
Subscription reminders Daily, 09:00 Emails customers whose subscription or update window is approaching its end.
Auto-approve referral earnings Daily, 09:30 Approves pending earnings older than your threshold.
Retry Paddle webhooks Every 15 minutes Reprocesses failed webhook events.
Prune download logs Daily, 02:30 Deletes download records past your retention setting.

What breaks without cron#

  • No renewal reminders, so more subscriptions lapse silently.
  • Failed webhooks are never retried, so a transient outage leaves sales unfulfilled indefinitely.
  • Earnings never auto-approve and pile up as pending.
  • Download logs grow without limit.

None of these throw an error. The panel keeps looking healthy while quietly doing less than it should — which is exactly why it is worth verifying rather than assuming.

Verifying#

Run it once by hand and watch the output:

php artisan schedule:run

Or run a single job directly:

php artisan webhooks:retry-paddle --status=all
php artisan subscriptions:send-reminders
php artisan referrals:auto-approve-earnings
php artisan downloads:prune-logs

Queue workers#

With QUEUE_CONNECTION=database, notifications are queued rather than sent inline. Something has to work the queue:

php artisan queue:work --tries=3

On shared hosting without a process supervisor, either run this from cron on a short interval or set QUEUE_CONNECTION=sync so notifications send immediately during the request. sync makes some requests slower, but it never leaves a welcome email stuck in a table that nothing is draining.