Skip to content

The cron job

The single most important step of the whole installation. Five minutes. Skip it and the system will look perfectly fine while doing nothing in the background — no errors, no warnings, no clue.

Why this one step matters so much

Everything that is supposed to happen on its own is driven by one scheduled command. Not some of it — all of it:

  • Sending SMS, email and app notifications
  • Fee invoices and payment reminders
  • Exam results released at their scheduled time
  • Birthday messages to students and staff
  • Automatic database backups
  • Daily summary emails
  • Pulling records from biometric attendance machines
  • Routine cleanup and health checks

Without the cron job, none of this runs. The panel still works, staff can still mark attendance and collect fees — but nothing ever leaves the building, and nothing reports an error. Messages sit in a queue waiting for a worker that never arrives.

This is the number one cause of "we installed it but SMS is not working".

Do not type this command — copy it from your own panel

Your installation works out the correct command for your server — the right PHP path, the right folder — and shows it to you ready to copy. Use that, and there is nothing to get wrong.

Sidebar → Server & Health → Server Health → Maintenance tab → Scheduled Tasks (Cron)

You should now see a box containing a command that begins with * * * * *. Copy it.

Then open your hosting panel's cron page, set it to run every minute, and paste the command in.

Why copy instead of type?

PHP lives in a different place on almost every host — /usr/bin/php on one, /opt/alt/php83/usr/bin/php on another. Your panel has already detected yours. A hand-typed path is the single most common reason a cron job silently does nothing.

If your host has no cron jobs, or only "fetch a URL"

Some shared hosting plans cannot run commands, and offer only a scheduled URL fetch. The same screen shows a second box for exactly this: a web address that does the same work when it is opened.

Copy that address from your panel and give it to your host's scheduler, set to run every minute.

Treat that address like a password

It is the one thing standing between the internet and your scheduler. Do not post it in a support forum, a screenshot, or anywhere public.

What the command actually says

Only useful if you are checking someone else's work — otherwise skip to the next section.

* * * * * /usr/bin/php /home/USERNAME/public_html/artisan schedule:run >> /dev/null 2>&1
PartMeaning
* * * * *Every minute, of every hour, of every day
/usr/bin/phpWhere PHP lives on this server
/home/.../artisanThe folder holding artisan — the folder you uploaded, not public
schedule:run"Do whatever is due right now"
>> /dev/null 2>&1Stops the server emailing you every single minute

Adding it on your hosting

What you are aiming for: a scheduled task that runs every minute, forever.

In hPanel, open Advanced → Cron Jobs, choose a custom interval of every minute, and paste the command. In cPanel the same screen is Advanced → Cron Jobs, where the interval boxes should all be set to *.

Panel wording changes between versions. Whatever the screen looks like, you need these five values set to every-minute — minute, hour, day, month, weekday all * — and the command above in the command box.

Checking that it worked

The same Maintenance screen has a Run Scheduler button under Quick Maintenance. Press it once: that proves the scheduler itself works, separately from whether your host is calling it.

So you can test the two halves independently:

TestWhat it proves
Run Scheduler button worksThe system is fine — any problem is in the cron setup
Button works, but nothing happens on its ownYour host is not calling the cron job

Then do one real test: send a test notice or trigger any message from the panel. If it arrives, the whole chain works end to end.

If it never arrives and no error appears anywhere, check the cron job first — before email settings, before the SMS provider, before anything else.

If it doesn't work

What you seeCauseFix
Nothing sends, no errors anywhereCron job missing or never savedRe-check it exists in the panel and is set to every minute
Cron emails you "No such file or directory" every minuteWrong folder pathPoint it at the folder containing artisan, not public
Cron emails you "php: command not found"Wrong PHP commandUse the exact PHP path your panel shows — often /usr/local/bin/php or a version-specific path
Some things send, others never doCron runs less often than every minuteChange the interval to every minute; longer gaps stall the queue
Your inbox fills with cron outputThe >> /dev/null 2>&1 part is missingAdd it to the end of the command

Do not change QUEUE_WORKER_MODE

Your .env contains QUEUE_WORKER_MODE=scheduler. That is what lets the single cron job also process the message queue. Changing it stops messages sending unless you are running a dedicated worker process on a VPS.