{"id":326544,"date":"2026-07-14T19:40:47","date_gmt":"2026-07-14T19:40:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cron-job-monitor\/"},"modified":"2026-07-14T19:40:24","modified_gmt":"2026-07-14T19:40:24","slug":"cronpulse","status":"publish","type":"plugin","link":"https:\/\/ml.wordpress.org\/plugins\/cronpulse\/","author":23143658,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.0.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Cron Pulse","header_author":"Farhan Ali","header_description":"A visual dashboard to monitor, debug, and manually trigger WordPress cron jobs. See schedules, last run times, execution duration, and pass\/fail status at a glance.","assets_banners_color":"1b2026","last_updated":"2026-07-14 19:40:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/cronpulse\/","header_author_uri":"https:\/\/farhanali.me","rating":0,"author_block_rating":0,"active_installs":0,"downloads":34,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"farhanalidev","date":"2026-07-14 19:40:24"}},"upgrade_notice":{"1.1.0":"<p>Dashboard visual refresh: alert banner, expandable rows, schedule timeline, filter strips. No data changes.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3607953,"resolution":"256x256","location":"assets","locale":"","width":1254,"height":1254}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3607953,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3607953,"resolution":"1","location":"assets","locale":"","width":1280,"height":801},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3607953,"resolution":"2","location":"assets","locale":"","width":1280,"height":801},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3607953,"resolution":"3","location":"assets","locale":"","width":1280,"height":801},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3607953,"resolution":"4","location":"assets","locale":"","width":1280,"height":801}},"screenshots":{"1":"Dashboard overview \u2014 scheduled jobs with live status indicators, overdue\/failing badges, and the 8-hour schedule strip","2":"Execution log with run history, status filter chips, duration sparklines, and paginated entries","3":"Email log showing delivery history with per-entry status chips and the SMTP debug log panel","4":"Settings \u2014 SMTP configuration, webhook alerts, and per-job overrides in a clean two-column layout"}},"plugin_section":[],"plugin_tags":[4567,17727,2679,4932,4568],"plugin_category":[59],"plugin_contributors":[271549],"plugin_business_model":[],"class_list":["post-326544","plugin","type-plugin","status-publish","hentry","plugin_tags-cron","plugin_tags-cron-jobs","plugin_tags-debugging","plugin_tags-developer-tools","plugin_tags-wp-cron","plugin_category-utilities-and-tools","plugin_contributors-farhanalidev","plugin_committers-farhanalidev"],"banners":{"banner":"https:\/\/ps.w.org\/cronpulse\/assets\/banner-772x250.png?rev=3607953","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cronpulse\/assets\/icon-256x256.png?rev=3607953","icon_2x":"https:\/\/ps.w.org\/cronpulse\/assets\/icon-256x256.png?rev=3607953","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cronpulse\/assets\/screenshot-1.png?rev=3607953","caption":"Dashboard overview \u2014 scheduled jobs with live status indicators, overdue\/failing badges, and the 8-hour schedule strip"},{"src":"https:\/\/ps.w.org\/cronpulse\/assets\/screenshot-2.png?rev=3607953","caption":"Execution log with run history, status filter chips, duration sparklines, and paginated entries"},{"src":"https:\/\/ps.w.org\/cronpulse\/assets\/screenshot-3.png?rev=3607953","caption":"Email log showing delivery history with per-entry status chips and the SMTP debug log panel"},{"src":"https:\/\/ps.w.org\/cronpulse\/assets\/screenshot-4.png?rev=3607953","caption":"Settings \u2014 SMTP configuration, webhook alerts, and per-job overrides in a clean two-column layout"}],"raw_content":"<!--section=description-->\n<p>WordPress developers fly blind with WP-Cron. The core tools give you no visibility into whether scheduled jobs are actually running, how long they take, or when they last fired.<\/p>\n\n<p><strong>Cron Pulse<\/strong> adds a clean dashboard under <strong>Tools \u2192 Cron Pulse<\/strong> that shows everything you need at a glance:<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Scheduled Jobs table<\/strong> \u2014 hook name, recurrence schedule, next run time, last run time, execution duration<\/li>\n<li><strong>Status indicators<\/strong> \u2014 Healthy \/ Overdue \/ Failing \/ Pending color coding so problems jump out immediately<\/li>\n<li><strong>Overdue detection<\/strong> \u2014 instantly see jobs that should have fired but haven't<\/li>\n<li><strong>Admin bar badge<\/strong> \u2014 a small warning indicator on every wp-admin (and front-end) page when something needs attention, so you don't have to remember to check the dashboard<\/li>\n<li><strong>Run Now<\/strong> \u2014 manually trigger any cron hook with one click (great for testing)<\/li>\n<li><strong>Unschedule<\/strong> \u2014 delete a stuck or duplicate scheduled event straight from the dashboard<\/li>\n<li><strong>Sortable columns and pagination<\/strong> \u2014 click Next Run or Duration to sort; 25 jobs per page on sites with large schedules<\/li>\n<li><strong>Duration sparkline<\/strong> \u2014 tiny trend line per hook so a creeping-up execution time is visible before it becomes a timeout<\/li>\n<li><strong>Execution Log<\/strong> \u2014 persistent log of run history with duration and pass\/fail status; retention is configurable<\/li>\n<li><strong>Hook and status filters<\/strong> \u2014 search by hook name or narrow the table to just Overdue\/Failing\/Healthy\/Never Run<\/li>\n<li><strong>DISABLE_WP_CRON warning<\/strong> \u2014 alerts you when automatic cron execution is disabled<\/li>\n<li><strong>Email and webhook alerts<\/strong> \u2014 get notified after N consecutive failed runs or when a job has been overdue too long, with optional per-job thresholds and a one-click snooze for incidents you already know about. Webhook payloads work directly with Slack and Discord, no relay needed \u2014 setup instructions are built into the Settings tab<\/li>\n<li><strong>Built-in SMTP settings<\/strong> \u2014 route alert emails through your own mail provider instead of the server's default mail() function, no separate SMTP plugin required<\/li>\n<li><strong>Email Log<\/strong> \u2014 see every alert\/test email Cron Pulse has sent, with delivery status and the underlying error if one failed<\/li>\n<li><strong>Email Debug Log<\/strong> \u2014 the raw SMTP conversation (connection, TLS, auth, server responses) for diagnosing delivery problems beyond a generic failure message \u2014 credentials are never written to it<\/li>\n<li><strong>Send Test Email \/ Send Test Webhook<\/strong> \u2014 confirm your notification settings actually work before you need them<\/li>\n<li><strong>WP-CLI support<\/strong> \u2014 <code>wp cronpulse status<\/code> for scripting health checks across sites<\/li>\n<li><strong>REST API<\/strong> \u2014 <code>GET \/wp-json\/cronpulse\/v1\/status<\/code> for remote dashboards, authenticated like any other WP REST route<\/li>\n<li>Zero external dependencies \u2014 pure PHP and vanilla jQuery<\/li>\n<\/ul>\n\n<h4>Who is this for?<\/h4>\n\n<ul>\n<li><strong>WordPress developers<\/strong> debugging cron-based features<\/li>\n<li><strong>Agencies<\/strong> maintaining multiple client sites<\/li>\n<li><strong>Enterprise teams<\/strong> needing visibility into scheduled background tasks<\/li>\n<li>Anyone tired of checking wp-cron manually or reading cryptic log files<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>This plugin stores cron execution data (hook name, timestamp, duration) in the WordPress options table. No data is sent externally unless you explicitly configure a webhook URL under alert settings, in which case alert payloads are POSTed to that URL. The REST API endpoint is read-only and pull-based \u2014 nothing is sent anywhere on its own. If you enable SMTP, your SMTP credentials are stored in the WordPress options table, same as any other plugin setting \u2014 no third-party service receives them except the SMTP server you configure. The email log stores recipient addresses and subjects for emails Cron Pulse has sent. All data is deleted on plugin uninstall.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>cronpulse<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate via <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Navigate to <strong>Tools \u2192 Cron Pulse<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20does%20a%20job%20show%20as%20%22overdue%22%3F\"><h3>Why does a job show as \"Overdue\"?<\/h3><\/dt>\n<dd><p>It means the scheduled run time has passed but the job hasn't fired yet. This can happen when <code>DISABLE_WP_CRON<\/code> is set in <code>wp-config.php<\/code>, or when your site has low traffic and the WP-Cron system-tick hasn't triggered.<\/p><\/dd>\n<dt id=\"does%20%22run%20now%22%20advance%20the%20next%20scheduled%20run%20time%3F\"><h3>Does \"Run Now\" advance the next scheduled run time?<\/h3><\/dt>\n<dd><p>No. It fires the hook's callback functions directly without modifying the cron schedule. Use it for testing or manual one-off execution.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20site%3F\"><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>No. The tracker hooks fire only during cron execution (not on regular page loads) and the overhead is limited to a transient read\/write per cron event.<\/p><\/dd>\n<dt id=\"where%20is%20the%20log%20stored%3F\"><h3>Where is the log stored?<\/h3><\/dt>\n<dd><p>In the WordPress options table under the key <code>cronpulse_execution_log<\/code>. The entry cap defaults to 200 and is configurable from the Settings tab (10\u20135000). It's cleared on uninstall.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20action%20scheduler%20or%20woocommerce%3F\"><h3>Is it compatible with Action Scheduler or WooCommerce?<\/h3><\/dt>\n<dd><p>Cron Pulse tracks jobs registered through the standard WordPress <code>wp_schedule_event()<\/code> \/ <code>_get_cron_array()<\/code> API. Action Scheduler uses its own queue system and is not covered.<\/p><\/dd>\n<dt id=\"how%20do%20i%20authenticate%20against%20the%20rest%20endpoint%3F\"><h3>How do I authenticate against the REST endpoint?<\/h3><\/dt>\n<dd><p>The same way as any other WordPress REST route: a logged-in browser session (cookie + nonce), or an Application Password for external tools \u2014 Users \u2192 Profile \u2192 Application Passwords. The requesting user needs the <code>manage_options<\/code> capability.<\/p><\/dd>\n<dt id=\"what%20does%20%22snooze%22%20do%3F\"><h3>What does \"Snooze\" do?<\/h3><\/dt>\n<dd><p>It acknowledges the current incident for that hook so no further alert is sent for it, without turning off alerts globally. The moment the job recovers and later fails (or becomes overdue) again, alerting resumes normally for that new incident.<\/p><\/dd>\n<dt id=\"why%20does%20the%20admin%20bar%20badge%20sometimes%20not%20appear%20right%20away%3F\"><h3>Why does the admin bar badge sometimes not appear right away?<\/h3><\/dt>\n<dd><p>It's evaluated on every page load along with everything else the plugin tracks, so it only updates when you load a page \u2014 there's no background process polling for it.<\/p><\/dd>\n<dt id=\"why%20would%20i%20need%20the%20smtp%20settings%3F\"><h3>Why would I need the SMTP settings?<\/h3><\/dt>\n<dd><p>Many hosts either don't have PHP's mail() function configured at all, or send through it in a way that gets flagged as spam (no SPF\/DKIM alignment, generic \"From\" address). Configuring SMTP with your own mail provider's credentials routes through a real authenticated mail server instead, without needing a separate SMTP plugin. Use \"Send Test Email\" after saving to confirm it's actually working.<\/p><\/dd>\n<dt id=\"where%20is%20the%20email%20log%20stored%2C%20and%20what%27s%20in%20it%3F\"><h3>Where is the email log stored, and what's in it?<\/h3><\/dt>\n<dd><p>In the WordPress options table under the key <code>cronpulse_email_log<\/code>, capped at the last 50 entries. Each entry has the recipient, subject, type (alert\/test), delivery status, and the underlying error message if it failed. Cleared on uninstall, or anytime via the Clear Email Log button.<\/p><\/dd>\n<dt id=\"%22failed%20to%20send%22%20isn%27t%20telling%20me%20enough%20%E2%80%94%20how%20do%20i%20dig%20deeper%3F\"><h3>\"Failed to send\" isn't telling me enough \u2014 how do I dig deeper?<\/h3><\/dt>\n<dd><p>Check the Email Debug Log on the Email Log tab. When SMTP is enabled it captures the actual SMTP conversation \u2014 connection attempt, TLS handshake, AUTH exchange, and the mail server's own response \u2014 for every send. It's a separate file under <code>wp-content\/uploads\/cronpulse-logs\/email-debug.log<\/code> (protected from direct web access), not the options table, since a raw protocol transcript doesn't belong in the database. Login credentials are redacted before anything is written, regardless.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Alert banner above the dashboard when jobs are failing or overdue \u2014 dismissible per session<\/li>\n<li>New: Upcoming schedule strip showing the next 8 hours of scheduled runs as a visual timeline<\/li>\n<li>New: Expandable job rows \u2014 click any row for inline details (error message, sparkline, actions); failing\/overdue rows pre-expanded<\/li>\n<li>New: Status chips (pill badges) throughout \u2014 replaces the small dot + plain text pattern<\/li>\n<li>New: Execution log filter strip \u2014 one-click filter for All \/ Success \/ Failed \/ Stuck<\/li>\n<li>New: Duration bars in the execution log \u2014 proportional mini bars give a visual sense of relative run time<\/li>\n<li>New: Inline error expansion in the Email Log \u2014 click a failed row to see the error without leaving the tab<\/li>\n<li>Improved: Summary cards now have colored left borders and show \"overdue since\" duration on the Overdue card<\/li>\n<li>Improved: Settings tab restructured into three sectioned cards (Alert Rules, SMTP, Webhook) for clarity<\/li>\n<li>Improved: Failed\/stuck execution log rows now have a colored left border stripe matching their severity<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"A visual dashboard to monitor, debug, and manually trigger WordPress cron jobs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/326544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=326544"}],"author":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/farhanalidev"}],"wp:attachment":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=326544"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=326544"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=326544"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=326544"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=326544"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=326544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}