Zactonz Cron Doctor
v1.0.0See whether your cron jobs really run, and fix the ones that do not.
What it checks
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.