Scheduler role
The scheduler advances time-based work: recurring invoices, reminders, service lifecycle actions, queued email, ticket imports, data cleanup, reports, and integrations. A healthy web interface does not prove the scheduler is healthy.
Frequency
Invoke the WBAMS scheduler at least hourly and preferably every five minutes. WBAMS decides which tasks are due. Configure the daily automation hour in the control area and keep the server timezone intentional.
*/5 * * * * /usr/bin/php -d opcache.enable_cli=0 /path/to/wbams/scheduler/scheduler.php
Verification
- The last scheduler invocation is recent.
- The daily automation run starts and completes.
- Queued email and gateway callbacks are moving.
- Expected recurring invoices are created once.
- Failed tasks produce actionable logs or alerts.
Troubleshooting
Run the command manually with CLI OPcache disabled, capture the exit status, inspect WBAMS and system logs, confirm file ownership, verify the CLI PHP version and extensions, and prevent overlapping executions.
The entry points
Everything scheduled runs from one directory. There are three entry points and they are invoked from cron on the command line.
Before 1.5.0 the daily automation was cron.php, which is what the directory was named after but not what anything else called it. It is now scheduler.php and the old name is removed rather than left as a second entry point. A crontab wired up by hand to scheduler/cron.php must be repointed.
The crontab line for the daily automation is:
/usr/bin/php -q /home/USER/public_html/scheduler/scheduler.php
Mail import and piping
There are two ways for customer replies to reach the help desk, and you use one or the other rather than both.
- Polling with
pop.phpon a schedule. The importer connects to the mailbox, reads what is there, and files it. Simple to set up; replies appear on the poll interval rather than immediately. - Piping with
pipe.php, configured at the mail server as the delivery target for the address. Replies appear instantly and nothing polls, but it requires mail-server configuration you may not control on shared hosting.
Before it, a customer replying to a ticket email left the message sitting in the mailbox. Those messages are still there — nothing was lost — so the first import after you set this up may bring in a backlog.
The web trigger and its key
The automation can also be triggered over HTTP, and until 1.5.0 nothing checked who was asking. Both web entry points now require a key from settings.php:
$cron_key = 'a-long-random-string';
Append ?key= and that value to the URL. Without a valid key the endpoint answers 404. Command-line invocation from cron needs no key and is unaffected.