BotMerze’s App\Console\Kernel registers the following scheduled commands. They all run via the single schedule:run cron entry — you do not add them individually.
| Command | Frequency | Purpose |
|---|---|---|
subscription:process-expiry-notifications |
Daily at 02:00 | Email customers whose subscription is expiring |
woocommerce:sync --type=products |
Every 6 hours | Reconcile products missed by webhooks |
woocommerce:sync --type=orders --days=1 |
Every 2 hours | Refresh orders for chatbot lookups |
woocommerce:sync --type=categories |
Daily at 03:00 | Sync category tree |
woocommerce:cleanup --days=30 |
Weekly (Sun 04:00) | Prune old sync/webhook logs |
shopify:refresh-tokens |
Every 30 minutes | Refresh expiring Shopify access tokens |
cPanel / shared hosting cron
Add one entry — the scheduler dispatches everything:
* * * * * cd /home/<user>/public_html/core && php artisan schedule:run >> /dev/null 2>&1
If you cannot run Supervisor on shared hosting, fall back to a per-minute “tick” worker for each queue:
# AI chat (highest priority) * * * * * cd /home/<user>/public_html/core && php artisan queue:work --queue=ai_chat_processing --stop-when-empty --max-time=55 >> /dev/null 2>&1 # Default (embeddings, mail, webhooks) * * * * * cd /home/<user>/public_html/core && php artisan queue:work --queue=default --stop-when-empty --max-time=55 >> /dev/null 2>&1 # Commerce sync (Woo + Shopify + Generic API) — combined * * * * * cd /home/<user>/public_html/core && php artisan queue:work --queue=woocommerce,shopify,generic-api --stop-when-empty --max-time=55 >> /dev/null 2>&1
⚠️ Cron-tick workers are a fallback. Real-time chat will feel sluggish (up to 60 s lag). Move to a VPS with Supervisor as soon as traffic grows.
VPS (sudo crontab -e -u www-data)
# Laravel scheduler — required (drives all scheduled commands above) * * * * * cd /home/<domain>/public_html/core && php artisan schedule:run >> /dev/null 2>&1 # Daily worker recycle at 04:00 (Supervisor will respawn them) 0 4 * * * cd /home/<domain>/public_html/core && php artisan queue:restart >> /dev/null 2>&1 # Optional: weekly horizon snapshot if you enable Horizon # 0 5 * * 0 cd /home/<domain>/public_html/core && php artisan horizon:snapshot >> /dev/null 2>&1
Verify the scheduler
cd /home/<domain>/public_html/core php artisan schedule:list # show every scheduled task with next run time php artisan schedule:test # interactively run any task to confirm it works
✅ The scheduler is mandatory — without it WooCommerce sync, Shopify token refresh, subscription expiries will not run.