# Zactonz Cron Doctor: What it checks

> See whether your cron jobs really run, and fix the ones that do not.

Page: https://developers.zactonz.com/cpanel-whm/cron-doctor/checks/

Complete documentation for this product: https://developers.zactonz.com/cpanel-whm/cron-doctor.md

Checks run every time the dashboard is opened. They are ordered by how much they matter, and a check that cannot finish is reported as one degraded finding rather than taking the page down.

## Needs attention

| Check | What it means |
|---|---|
| A line in the crontab is not a cron job | A line is neither a comment, a setting nor a job. Cron usually refuses to load the whole crontab, which silently stops every job in it. |
| The crontab has Windows line endings | Cron passes the carriage return to the shell, so the command fails with a confusing "No such file or directory". |
| Points at a file that is not there | A path in the command does not exist in the account. Usually a script that was moved, renamed or deleted. |
| The last run failed | The last run, or the last several, exited non-zero. The captured output is on the job page. |
| It has not run when it should have | The job was due and there is no record of it running. |
| Cron email is switched off | `MAILTO` is empty, so cron will never send mail about anything. |
| Other users can read the Cron Doctor folder | The folder holding captured output is readable by other accounts on the server. |

## Worth fixing

| Check | What it means |
|---|---|
| Runs PHP from a generic path | The job runs `php` or `/usr/bin/php` rather than the site's EasyApache binary. On cPanel `/usr/bin/php` is usually `php-cgi`. **One-click fix.** |
| WordPress cron is triggered more than once | More than one line drives WordPress cron for the same installation, so scheduled tasks run more often than intended. |
| WordPress is still running its own cron as well | A real cron job drives WordPress cron but `DISABLE_WP_CRON` is not set, so tasks run twice and busy pages get slower. Cron Doctor only reads `wp-config.php`; it does not change it. |
| Throws its output away | Everything the job prints, errors included, goes to `/dev/null`. **One-click fix** once the job is monitored. |
| Runs are overlapping | Runs are being skipped because the previous one is still going. |
| The last run was stopped at its time limit | The job reached the limit set for it. |
| A stopped job may have left work running | The server has neither `timeout` nor `setsid`, so background work may survive a time limit. |
| The command has an unclosed quote | The shell may interpret it very differently from what was intended. |
| The same job appears twice | An identical schedule and command on two lines, so the command runs twice. |
| The schedule cannot be read | Syntax outside what Cron Doctor parses. The job is still listed and still recorded; only the overdue judgement is unavailable. |
| Cron Doctor is in read-only mode | Commands cannot be run on this account, so nothing will be written. |
| The runner in your home directory is out of date | The copy there does not match the installed plugin. One click repairs it. |

## Suggestions

| Check | What it means |
|---|---|
| Uses a different PHP version from the site | The job runs one EasyApache version while the site it belongs to is set to another. **One-click fix.** |
| WordPress cron runs very often | Most sites are fine with every five or fifteen minutes. |
| Output is still being discarded | The job is recorded, but the command still ends with a redirection to `/dev/null`. **One-click fix.** |
| It nearly takes as long as the gap between runs | Runs will start overlapping if the job gets any slower. |
| The command contains a credential | A password or token on the command line is visible to anyone who can list processes, and sits in the crontab in plain text. |
| Runs only when the server restarts | `@reboot` has no next scheduled time, so it can never be judged overdue. |
| Jobs that are not monitored yet | Nothing is being recorded about them. |
| Time limits cannot be enforced cleanly here | Neither `timeout` nor `setsid` is available to the account. |

## What it will not do on its own

Cron Doctor never edits a crontab without being asked, never changes `wp-config.php`, and never deletes a cron job. The one-click fixes rewrite a command; each says exactly what it will change before you press it, and the crontab is backed up first.

Credentials are masked in the command shown in the interface. That is a convenience for screenshots, not a security control — the real value is still in the crontab and in the process list while the job runs, and the interface says so.
