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.

scheduler/scheduler.php
The daily automation: invoicing, reminders, suspensions, terminations, currency rates, queued jobs.
scheduler/pop.php
The mail import, which collects replies from a mailbox and files them against tickets.
scheduler/pipe.php
The email pipe, invoked by the mail server rather than by cron, for direct delivery into the help desk.
cron.php no longer exists.

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.

  1. Polling with pop.php on 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.
  2. 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.
Mail import is new in 1.5.0.

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.