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.

On a SaaS install one cron entry runs the scheduler for every workspace, and it is the super admin's to add. A workspace administrator sees whether it is running and what it runs, but not the line; the screen asks them to tell the platform's administrator if it says Not running.

Is it running?

The scheduler: whether it is running, the line to add, and every task it runs with its timing. 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.

JobHow often
Queued email, and starting and sending campaignsEvery minute
Reading the watched mailboxes for new leads and ticketsEvery minute
The scheduler's own heartbeatEvery minute
The automatic backup, when it is dueEvery five minutes
Invoices scheduled to be sentEvery fifteen minutes
Invoice, estimate, contract and task reminders (from the chosen hour), and personal remindersHourly
Timed automation rulesHourly
Closing idle tickets, forgotten timers and open shiftsHourly
Project deadline remindersHourly
Marking running goals achieved once their target is met (zenta:goals:stamp)Hourly
Deleting expired personal-data exportsHourly
Repeating tasksDaily at 01:00
Recurring expensesDaily at 01:30
Subscription invoicesDaily at 02:00
Marking lapsed platform subscriptions as expired (SaaS)Daily at 03:00
Deleting old sign-in attemptsDaily at 04:00
Pruning the activity logWeekly

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.

MethodAddressWhat it does
GETadmin/settings/schedulerWhether the scheduler is running, the cron line (not for a workspace administrator on a SaaS install), and what it runs.