Back to guides

Guides · May 9, 2026

cPanel cron jobs: setup, debugging, and when to stop using them

cPanel still runs a huge share of the world's cron jobs. This is the setup walkthrough, the mistakes that block firing, where logs hide on shared hosts, and when external cron is the cleaner exit.
crontap.com / guides
How to set up cron in cPanel, fix the five mistakes that stop jobs from firing, find logs on shared hosting, and when external cron is worth it.

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

  1. Log into cPanel for your domain.
  2. Open Advanced (section name varies slightly by host).
  3. 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

  1. 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.
  2. 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
  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>&1

Use 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>&1

Or 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_log or 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

  1. Expose a locked HTTP endpoint on your site (or point at wp-cron.php for WordPress).
  2. Create a Crontap schedule with the URL, cadence, and timezone.
  3. Add an Authorization header so only Crontap can trigger the route.
  4. 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 →

From the blog

Read the blog

Guides, patterns and product updates.

Tutorials on scheduling API calls, webhooks and automations, plus deep dives into cron syntax, timezones and reliability.

Alternatives

Vercel Cron every minute: beating the Hobby hourly limit

Vercel Cron caps Hobby at hourly cadence and 5 jobs, and ties every change to a redeploy. Here is the external cron pattern teams use to ship per-minute schedules, per-IANA timezones, and one dashboard across projects without paying $20/mo per user for Pro.

Alternatives

Cloud Run cron without Cloud Scheduler

Cloud Scheduler costs $0.10 per job per month after the first 3 and asks for OIDC plus IAM bindings on every target. Here is the IAM-free pattern Cloud Run teams use to fire their .run.app URLs on a clock with one bearer token and one dashboard across every GCP project.