cPanel still runs more cron jobs than almost any other UI on the web. If you bought shared hosting in the last fifteen years, you have probably opened Advanced → Cron Jobs at least once and wondered why your script never fired.
This guide is the practical walkthrough: where to click, the minimum command line, the mistakes that block execution, where logs live, and when to move scheduling to external HTTP cron instead.
Where to find cron jobs in cPanel
- Log into cPanel for your domain.
- Open Advanced (section name varies slightly by host).
- Click Cron Jobs.
You will see Standard and Advanced modes. Standard is enough for most PHP and shell scripts.
How to set up a cron job in cPanel
- Under Add New Cron Job, pick the schedule:
- Once per hour, Once per day, or use the minute/hour/day dropdowns for custom cadence.
- Many shared hosts allow 1-minute minimum; confirm with your host.
- In Command, paste the full command. Example for a PHP script:
/usr/local/bin/php -q /home/username/public_html/wp-cron.php > /dev/null 2>&1- Click Add New Cron Job.
For a Python script on hosts that ship it:
/usr/bin/python3 /home/username/scripts/nightly.py >> /home/username/logs/nightly.log 2>&1Use Advanced mode when you already know the five-field cron expression (*/5 * * * *).
Common cPanel cron mistakes
Forgetting /usr/bin/php (or the host's PHP path)
php script.php fails silently because cron's PATH does not include PHP. Run which php over SSH or ask support for the binary path.
Email spam from cron output
By default cPanel emails the account owner every time cron prints to stdout. Redirect output:
/usr/local/bin/php -q /path/to/script.php > /dev/null 2>&1Or log to a file you rotate.
PATH not set inside cron
Commands like composer, node, or curl may not resolve. Set paths explicitly or source a small wrapper script that exports PATH first.
Where the logs are on a typical cPanel host
- cPanel cron email: check the inbox for the hosting account if output was not redirected.
- Host error log: often
~/logs/error_logor via Metrics → Errors in cPanel. - Your redirect file: if you used
>> ~/logs/job.log 2>&1, tail that file over SSH.
For WordPress specifically, also see Replace WordPress wp-cron with a real scheduler.
When to leave cPanel cron behind
Shared host limits
Runtime caps, CPU throttling, and "no long-running processes" in the ToS. A job that takes 10 minutes may be killed without a clear error in cPanel.
No retry, no alert, no per-job isolation
One bad command does not page you. You discover failure when a customer complains or when you remember to check logs.
When you outgrow LAMP
Multiple apps, staging vs production, or jobs that should not share one server's clock. External cron gives one dashboard across environments.
cPanel cron typically caps at 1-minute intervals on shared hosts. Crontap matches that floor on Pro at $3.25/mo annual with retries and Slack alerts.
External cron alternative for the same site
- Expose a locked HTTP endpoint on your site (or point at
wp-cron.phpfor WordPress). - Create a Crontap schedule with the URL, cadence, and timezone.
- Add an
Authorizationheader so only Crontap can trigger the route. - Disable duplicate firing in cPanel once Crontap runs cleanly for a week.
Fix this in 60 seconds with Crontap. Free forever tier. Three schedules. No credit card. Schedule your first job →
FAQ
Why did my cPanel cron run once then stop?
Check email for cron output, verify the command exits 0, and confirm the schedule fields (especially day-of-month vs day-of-week OR semantics). See Cron job not running?.
Can cPanel cron call a URL?
Some hosts allow curl or wget in cron. That is fragile (SSL, auth, timeouts). A dedicated HTTP scheduler handles retries and logs the response body.
Is external cron allowed on shared hosting?
Usually yes if your site can receive HTTPS requests. You are not opening new ports; you are hitting a URL you already serve.
Related on Crontap
Fix this in 60 seconds with Crontap. Free forever tier. Three schedules. No credit card. Schedule your first job →
