The scheduler
One cron entry that runs everything on a timer — and a screen that tells you whether it is running.
Reminders, recurring invoices and tasks, timed automations, campaigns, queued email and closing idle tickets all run from one cron entry. Without it the application still works — and those things silently never happen.
Setting it up
Settings → Scheduler shows the exact line for your server under The crontab line for this install, with the paths filled in and a button to copy it:
* * * * * cd /home/you/zenta-crm && php artisan schedule:run >> /dev/null 2>&1
In cPanel: Cron Jobs → Common settings: "Once Per Minute", and paste the command shown under the line. If your host's command-line PHP lives somewhere else, replace the PHP part with the path your host's documentation gives.
Is it running?
The scheduler: whether it is running, the line to add, and every task it runs with its timing.
The scheduler records a heartbeat every minute, and the badge at the top of the Scheduler screen says whether it is running, with when it last ran. Running means within the last few minutes; Not running with a time means it has stopped; Not running with no time means it has never run on this install — the cron entry was never added.
When reminders go out
Customer reminders are sent from a chosen hour of the day — 09:00 by default, in the application's time zone — so nobody receives an invoice reminder at three in the morning. Change it under Reminders goes to Settings → Reminders. Everything else runs on its own timing, listed under What it runs on the Scheduler screen, each task with its timing written the way cron writes it.
| Job | How often |
|---|---|
| Queued email, and starting and sending campaigns | Every minute |
| Reading the watched mailboxes for new leads and tickets | Every minute |
| The scheduler's own heartbeat | Every minute |
| The automatic backup, when it is due | Every five minutes |
| Invoices scheduled to be sent | Every fifteen minutes |
| Invoice, estimate, contract and task reminders (from the chosen hour), and personal reminders | Hourly |
| Timed automation rules | Hourly |
| Closing idle tickets, forgotten timers and open shifts | Hourly |
| Project deadline reminders | Hourly |
Marking running goals achieved once their target is met (zenta:goals:stamp) | Hourly |
| Deleting expired personal-data exports | Hourly |
| Repeating tasks | Daily at 01:00 |
| Recurring expenses | Daily at 01:30 |
| Subscription invoices | Daily at 02:00 |
| Marking lapsed platform subscriptions as expired (SaaS) | Daily at 03:00 |
| Deleting old sign-in attempts | Daily at 04:00 |
| Pruning the activity log | Weekly |
Any job can be run by hand to see what it does:
php artisan zenta:reminders:send,
php artisan zenta:mail:send, and so on — each prints what it
did.
Addresses on this page
For reference and for anyone scripting against the panel. Everything here needs somebody signed in to the workspace whose role allows it; anybody else is refused.
| Method | Address | What it does |
|---|---|---|
GET | admin/settings/scheduler | Whether the scheduler is running, the cron line (not for a workspace administrator on a SaaS install), and what it runs. |