{"id":74647,"date":"2026-07-02T07:49:49","date_gmt":"2026-07-02T13:49:49","guid":{"rendered":"https:\/\/www.scalahosting.com\/blog\/?p=74647"},"modified":"2026-07-02T07:49:50","modified_gmt":"2026-07-02T13:49:50","slug":"wordpress-cron-jobs","status":"publish","type":"post","link":"https:\/\/www.scalahosting.com\/blog\/wordpress-cron-jobs\/","title":{"rendered":"6 Useful Cron Jobs for WordPress Sites and When to Use Them"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The scheduled blog post you queued for 9 AM Monday went live at 2 PM. Your daily database backup didn&#8217;t run last weekend. And the SSL certificate on your client&#8217;s site expired forty minutes before they noticed &#8211; by which point Google was already warning visitors away.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three different problems, same root cause: cron jobs that either weren&#8217;t set up, weren&#8217;t running, or weren&#8217;t running on time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress depends on background work to function. Publishing scheduled posts, sending password reset emails, pruning expired data, checking for plugin updates &#8211; none of it happens by magic, and none of it happens reliably unless you tell it to.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Below are six useful WordPress cron jobs to consider, with example syntax you can adjust and test before relying on it. Some are good fits for real Linux cron, while others may be better handled by SPanel\u2019s built-in WordPress Manager, account backups, or website monitoring.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why WordPress&#8217;s Default Cron Isn&#8217;t Enough<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress has a built-in scheduler called <strong>wp-cron<\/strong>. It triggers scheduled tasks only when someone visits your site. On a high-traffic site, that&#8217;s fine &#8211; there&#8217;s always someone walking through the door. On a low-traffic site (or one that goes quiet overnight), tasks pile up and run hours late, if they run at all.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That delay matters more than it sounds. Security updates, scheduled posts, transactional emails, plugin auto-updates, and integration syncs all sit in the wp-cron queue waiting for a trigger that may never come at the right time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Patchstack&#8217;s<a href=\"https:\/\/patchstack.com\/whitepaper\/state-of-wordpress-security-in-2026\/\" rel=\"nofollow\"> 2026 State of WordPress Security report<\/a> found <strong>11,334 new WordPress vulnerabilities<\/strong> disclosed in 2025 &#8211; a 42% jump over the prior year &#8211; with 91% of them in plugins. The most uncomfortable finding: the median time from public disclosure to the first wave of exploitation attempts is five hours. If your plugin update schedule is &#8220;whenever wp-cron gets around to it,&#8221; you&#8217;re losing that race before you start.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Real Linux cron solves this. It runs on a clock, not on visitor traffic. The six jobs below assume you&#8217;ve already moved off wp-cron &#8211; which is, conveniently, job number one.<\/p>\n\n\n\n<p class=\"alert-blue wp-block-paragraph\">On ScalaHosting, you do not have to guess whether a cron job works. In SPanel\u2019s Cron Job Manager, you can add a job, run it immediately, and inspect the captured output before waiting for the scheduled time. New jobs are quiet by default because SPanel uses an empty MAILTO= setting, and every job runs under your hosting account user rather than root. For WordPress-specific work, SPanel also gives you WordPress Manager staging, updates, file locking, and account-level backups, so some maintenance tasks are better handled natively than through custom cron.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Six Cron Jobs Every WordPress Site Should Have<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full mpg-gallery\"><img decoding=\"async\" width=\"1140\" height=\"513\" src=\"https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/The-Six-Cron-Jobs-Every-WordPress-Site-Should-Have-1140x513-1.webp\" alt=\"6 Useful Cron Jobs for WordPress Sites and When to Use Them, The Six Cron Jobs Every WordPress Site Should Have\" class=\"wp-image-74651\" srcset=\"https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/The-Six-Cron-Jobs-Every-WordPress-Site-Should-Have-1140x513-1.webp 1140w, https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/The-Six-Cron-Jobs-Every-WordPress-Site-Should-Have-1140x513-1-300x135.webp 300w, https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/The-Six-Cron-Jobs-Every-WordPress-Site-Should-Have-1140x513-1-768x346.webp 768w\" sizes=\"(max-width: 361px) 660px, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 910px, 1140px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Each entry uses standard cron syntax &#8211; five fields for the schedule (minute, hour, day of month, month, day of week), followed by the command. If you&#8217;re new to cron,<a href=\"https:\/\/crontab.guru\" rel=\"nofollow\"> crontab.guru<\/a> is the fastest way to translate a pattern into plain English.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A note before the snippets: full command paths (like \/usr\/bin\/php vs. just php) vary by host. The snippets below use generic command names &#8211; if your environment requires absolute paths, your control panel or host documentation will list them.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Replace wp-cron with Real Cron (Every 15 Minutes)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The problem:<\/strong> wp-cron only fires on page visits, which is unreliable on low-traffic sites.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The fix:<\/strong> two changes. First, disable wp-cron in wp-config.php by adding this line near the other define() statements:<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">php<br>define(&#8216;DISABLE_WP_CRON&#8217;, true);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then add this cron entry, replacing yourdomain.com with your actual domain:<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">*\/15 * * * * wget -q -O &#8211; https:\/\/yourdomain.com\/wp-cron.php?doing_wp_cron &gt;\/dev\/null 2&gt;&amp;1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can have cron send an email every time it runs a command which produces output. If you do not want an email to be sent for an individual cron job, you can redirect the command\u2019s output to <em>\/dev\/null<\/em>.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why every 15 minutes:<\/strong> most WordPress scheduled tasks tolerate a 15-minute window without anyone noticing. More frequent is overkill; less frequent risks late post publishing or delayed transactional email.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Daily Database Backup (Every Day, 2 AM)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The problem:<\/strong> your database is the single most painful thing to lose. Themes and plugins can be reinstalled; user comments, orders, and content can&#8217;t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The cron entry:<\/strong><\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">0 2 * * * mysqldump -u DB_USER -pDB_PASS DB_NAME &gt; \/home\/USER\/backups\/db-$(date +\\%Y\\%m\\%d).sql<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Replace the placeholders with your database password, your account username, and your database name. Make sure the backups\/ directory exists first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note the escaped % signs. Cron treats % as a special character &#8211; you need backslashes in front of them, or the command silently breaks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why daily, at 2 AM:<\/strong> quiet hours, before your other maintenance kicks in. Daily snapshots give you fine-grained recovery points on top of your host&#8217;s standard backups. They don&#8217;t replace your host&#8217;s backups; they complement them.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Weekly Cleanup of Old Files and Expired Data (Sunday, 3 AM)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The problem:<\/strong> WordPress sometimes accumulates badly designed or overly complicated code. Expired transients pile up in the database. Old backups from job #2 fill your disk. Neither cleans itself up.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For pruning your local backup directory and keeping the last 30 days:<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">0 3 * * 0 find \/home\/USER\/backups\/ -type f -mtime +30 -delete<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For expired transients in the database, the cleanest approach uses WP-CLI:<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">0 3 * * 0 cd \/home\/USER\/public_html &amp;&amp; wp transient delete &#8211;expired&nbsp;<\/p>\n\n\n\n<p class=\"alert-blue wp-block-paragraph\"><strong>IMPORTANT<\/strong>: WP-CLI isn&#8217;t installed on every host. Our managed VPS plans ship with WP-CLI preinstalled, but on other environments, you may need to install it yourself &#8211; or replace the transient cleanup with a direct SQL query against the wp_options table.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why Sunday 3 AM:<\/strong> most sites are quietest then, and a weekly cleanup is plenty for any normal-traffic site.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Daily Plugin Update Check (Every Day, 4 AM)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The problem:<\/strong> plugins are the WordPress attack surface. Patchstack&#8217;s data shows 91% of vulnerabilities live in plugin code, with most exploited within hours of disclosure. Falling behind on plugin updates is the most common single reason WordPress sites get compromised &#8211; and tightening up your WordPress security practices starts here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want a daily alert rather than automatic updates, WP-CLI handles the check cleanly:<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">0 4 * * * cd \/home\/USER\/public_html &amp;&amp; wp plugin list &#8211;update=available | mail -s &#8220;Plugin updates available&#8221; you@yourdomain.com<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want fully automatic updates, swap list &#8211;update=available for update &#8211;all:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Disclaimer<\/strong>: If you have already input your Cron Email in SPanel\/cPanel, there is no need of | mail-s in the command?<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">0 4 * * * cd \/home\/USER\/public_html &amp;&amp; wp plugin update &#8211;all&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you run this through SPanel, use the Cron Job Manager\u2019s manual run option first. Manual-run output is captured after the command finishes, and scheduled execution may behave differently for unusual pipe-heavy commands.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Here&#8217;s the thing &#8211; auto-updating plugins in production isn&#8217;t always the right call. A bad plugin update has taken down more sites than any hacker. Staging environments exist for a reason. The conservative pattern is alert-only in cron, then apply the update manually after testing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If WP-CLI isn&#8217;t available on your host, you can write a small PHP script that queries the WordPress updates API and emails the results &#8211; but that&#8217;s more code than a one-liner can handle.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Monthly Database Optimization (1st of Each Month, 5 AM)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The problem:<\/strong> as you write, edit, delete, and revise content, MySQL doesn&#8217;t always reclaim freed space efficiently. Over time, tables become fragmented, and query times creep up. WooCommerce and busy comment systems suffer the most &#8211; fixing this is one of the simpler wins in any WordPress performance optimization routine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Using WP-CLI:<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">0 5 1 * * cd \/home\/USER\/public_html &amp;&amp; wp db optimize&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Without WP-CLI, plain mysqlcheck does the equivalent:<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">0 5 1 * * mysqlcheck &#8211;optimize -u DB_USER -pDB_PASS DB_NAME<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why monthly:<\/strong> optimization briefly locks tables. Run it too often, and you&#8217;ll create short freezes that real users feel. Once a month, at 5 AM on the 1st, is the standard sweet spot.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6. Daily SSL Expiration Check (Every Day, 6 AM)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The problem:<\/strong> SSL certificates expire. Even auto-renewing certificates fail sometimes &#8211; a misconfigured renewal hook, a domain that didn&#8217;t validate, an Auto SSL provider having a bad day. When they expire silently, your visitors see a giant red browser warning before you do.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A one-liner that emails you when the certificate has fewer than 14 days left:<\/p>\n\n\n\n<p class=\"alert-orange wp-block-paragraph\">0 6 * * * echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2&gt;\/dev\/null | openssl x509 -noout -checkend 1209600 || echo &#8220;SSL expiring soon for yourdomain.com&#8221;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The -checkend 1209600 flag returns a non-zero exit code if the certificate expires within 14 days. The || after it runs the alert email only when that check fails &#8211; silence when everything&#8217;s fine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adjust the window to match your operational comfort: 30 days (-checkend 2592000) gives you more reaction time; 7 days (-checkend 604800) is quieter but doesn&#8217;t leave much room for a renewal gone sideways.<\/p>\n\n\n\n<p class=\"alert-blue wp-block-paragraph\"><strong>Important<\/strong>: On ScalaHosting managed VPS plans, <strong>SPanel Website Monitoring<\/strong> can already check SSL expiration and alert you when a certificate is within 72 hours of expiry, so most SPanel users should enable that first. Use a cron-based SSL check only when you want an extra independent alert or when you are adapting the command for a non-SPanel environment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Weekly Schedule at a Glance<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s what these six jobs look like running together across a typical week:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large mpg-gallery\"><img decoding=\"async\" width=\"1140\" height=\"604\" src=\"https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/image1-1140x604.webp\" alt=\"6 Useful Cron Jobs for WordPress Sites and When to Use Them, The Weekly Schedule at a Glance\" class=\"wp-image-74652\" srcset=\"https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/image1-1140x604.webp 1140w, https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/image1-300x159.webp 300w, https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/image1-768x407.webp 768w, https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/image1-1536x814.webp 1536w, https:\/\/www.scalahosting.com\/blog\/wp-content\/uploads\/2026\/07\/image1.webp 1999w\" sizes=\"(max-width: 361px) 660px, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 910px, 1140px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Quick scan<\/strong>: only one job (wp-cron) runs continuously. The other five fire once a day, once a week, or once a month &#8211; small, predictable bursts during low-traffic hours, all wrapped up by 6 AM.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How ScalaHosting Handles WordPress Cron Differently<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The honest version of setting up cron jobs on most hosts: you paste the entry, save it, and wait until 3 AM to find out whether it worked. If it didn&#8217;t, you might never know &#8211; your job fails silently, the output gets sent to a Unix mailbox you&#8217;ve never logged into, and the work simply doesn&#8217;t happen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We do things differently at ScalaHosting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We built the <strong>Cron Job Manager<\/strong> in<a href=\"https:\/\/www.scalahosting.com\/spanel.html\"> SPanel<\/a> to fix the parts of this workflow that frustrate everyone. A &#8220;run now&#8221; button executes any job immediately and captures the output in the panel, so <strong>you can verify a command works <\/strong><strong><em>before<\/em><\/strong><strong> trusting it to the schedule<\/strong>. The default email setting is silence &#8211; no inbox spam from a mailbox nobody checks &#8211; but you can flip on notifications with one field when you want them. And every cron job runs under your hosting account user, not root, so the same Linux permission boundary that protects your files protects your scheduled tasks as well.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Some of these jobs are better handled natively on ScalaHosting managed VPS plans. SPanel account-level backups protect WordPress files and databases on the configured backup schedule, while <a href=\"https:\/\/www.scalahosting.com\/wordpress-manager.html\">WordPress Manager<\/a> handles WordPress core, plugin, and theme updates through the panel. For risky changes, WordPress Manager staging lets you test updates before touching production. That means cron is useful for custom workflows, but it should not replace the safer built-in tools where SPanel already covers the job.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The other four (real wp-cron, weekly cleanup, monthly database optimization, SSL expiration check) live in the Cron Job Manager, where you can paste and test them with one click.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Security-wise,<a href=\"https:\/\/www.scalahosting.com\/website-security.html\"> SShield<\/a> runs continuously in the background and blocks 99.998% of known web attack patterns before they reach your site. It doesn&#8217;t replace the maintenance cron jobs above, but it absorbs the brute-force noise so the alerts you do receive &#8211; from your plugin update check, your SSL monitor &#8211; aren&#8217;t drowned out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">All of this runs across managed VPS infrastructure that currently hosts more than 700,000 websites across 120+ countries.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular green-rows\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Task<\/strong><\/th><th><strong>Use cron?<\/strong><\/th><th><strong>Better SPanel option?<\/strong><\/th><th><strong>Notes<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Replace wp-cron<\/td><td>Yes<\/td><td>Cron Job Manager<\/td><td>Good fit; test with Run Now.<\/td><\/tr><tr><td>Database backup<\/td><td>Sometimes<\/td><td>SPanel account backups<\/td><td>Use cron dump only as an extra export layer.<\/td><\/tr><tr><td>Plugin update check<\/td><td>Sometimes<\/td><td>WordPress Manager updates\/staging<\/td><td>Alert-only is safer than auto-update in production.<\/td><\/tr><tr><td>Plugin auto-update<\/td><td>Be careful<\/td><td>WordPress Manager auto-updates\/staging<\/td><td>Test on staging first.<\/td><\/tr><tr><td>DB optimization<\/td><td>Sometimes<\/td><td>Manual\/admin review for busy stores<\/td><td>Can lock tables; avoid overuse.<\/td><\/tr><tr><td>SSL expiration check<\/td><td>Usually no on SPanel<\/td><td>Website Monitoring \/ AutoSSL<\/td><td>SPanel already alerts before expiry.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Takeaway<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Six cron jobs. None of them complicated. All of them quietly prevent the kind of Monday-morning emergencies that get blamed on WordPress when the real culprit was a missing background task.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set them up once. Make sure they actually run. Then forget about them &#8211; which is the whole point of a scheduler in the first place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re running WordPress on a host where setting up and testing cron jobs is more friction than it should be, take a look at our managed VPS plans &#8211; the Cron Job Manager and WordPress Manager are included with every one.<\/p>\n\n\n<div class=\"shortcode-cta-new-wrap row cloudvps\">\r\n    <img decoding=\"async\" class=\"shortcode-logo\" src=\"\/blog\/images\/shortcode-bg-new-logo-cloudvps.svg\" alt=\"shortcode-logo\" title=\"shortcode-logo\"\/>\r\n    <div class=\"shortcode-cta-img col-10 col-sm-7 col-md-5\">\r\n        <img decoding=\"async\" class=\"shortcode-bg\" src=\"\/blog\/images\/shortcode-bg-new-cloudvps.webp\" alt=\"shortcode-bg\" title=\"shortcode-bg\"\/>\r\n    <\/div>\r\n    <div class=\"shortcode-cta-content col-12 col-md-7\">\r\n        <div class=\"content\">\r\n            <div class=\"heading\">Supercharge Your Business with an All-inclusive Fully Managed Cloud<\/div>\r\n            <div class=\"list-wrap\">\r\n                <div class=\"list\">\r\n                    <div><b>Free, Effortless & No-Downtime Migration<\/b><\/div>\r\n                    <div><b>Anytime Unconditional Money-back Guarantee<\/b><\/div>\r\n                    <div><b>Full Scalability & 24\/7 Expert Cloud Support<\/b><\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"btn-wrap row\">\r\n                <div class=\"col-auto\">\r\n                    <a class=\"button green\" href=\"https:\/\/www.scalahosting.com\/managed-cloud-hosting.html\">Start Now<\/a>\r\n                <\/div>\r\n                <div class=\"col-auto\">\r\n                    <button class=\"button brown_outer\" title=\"Contact Sales\" onclick=\"chatChangeVisibility(this, 'maximize', {}, 5);\">Chat with our Experts<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQ<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>What is wp-cron, and Why Should You Replace It with Real Cron?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> wp-cron is WordPress&#8217;s built-in pseudo-scheduler. It triggers scheduled tasks only when someone visits your site, which means low-traffic sites end up with delayed posts, late backups, and missed update checks. Replacing wp-cron with a real Linux cron entry (calling wp-cron.php every 15 minutes) fires those tasks on an actual clock &#8211; the way every other scheduled job on your server already works.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>How Often Should a WordPress Site Back Up Its Database?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Daily is the standard for any site with active users &#8211; posts, comments, orders, or form submissions. The most painful losses are the ones measured in hours of unrecoverable customer data. Sites that rarely change can scale this back to weekly, but the disk cost of a daily SQL dump is so low that there&#8217;s rarely a reason not to.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Can a Cron Job Break Your WordPress Site?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Yes, but only the same way any command on your server can break your site, and only within the scope of what your account can already do. Cron runs your commands; it doesn&#8217;t add new permissions. Auto-updating plugins via cron is the most common way users break their own sites, which is why the pattern most agencies follow is alert-only in cron with manual review before applying updates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Do You Still Need Cron-Based Backups if Your Host Already Backs Up Daily?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Not strictly, but the extra layer is cheap insurance. Your host&#8217;s backups protect against infrastructure failures; your cron-based dumps give you finer-grained recovery points for the kind of mistakes humans make &#8211; an accidental deletion, a bad import, a plugin that mangled the database before anyone noticed. The two can easily coexist; they don&#8217;t duplicate each other.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>What Is the Smallest Interval Cron Can Schedule?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> One minute. The shortest cron pattern is * * * * * &#8211; every minute, every hour, every day. Cron doesn&#8217;t support sub-minute scheduling. For anything that needs to run more frequently, you&#8217;ll need a long-running script with a sleep loop, or a real job queue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>How Do You Test a WordPress Cron Job Before Its Scheduled Time?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> The cleanest way is a control panel with a &#8220;run now&#8221; button &#8211; the Cron Job Manager in SPanel has one, which executes the job immediately and shows the output in the dashboard. Without that, you can run the command directly in SSH (cron commands are just shell commands), but the SSH environment isn&#8217;t identical to cron&#8217;s environment, which is where most subtle failures hide.<\/p>\n\n\n\n<script type=\"application\/ld+json\">\n    {\n      \"@context\": \"https:\/\/schema.org\",\n      \"@type\": \"FAQPage\",\n      \"mainEntity\": [{\n        \"@type\": \"Question\",\n        \"name\": \"What is wp-cron, and Why Should You Replace It with Real Cron?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"wp-cron is WordPress's built-in pseudo-scheduler. It triggers scheduled tasks only when someone visits your site, which means low-traffic sites end up with delayed posts, late backups, and missed update checks. Replacing wp-cron with a real Linux cron entry (calling wp-cron.php every 15 minutes) fires those tasks on an actual clock - the way every other scheduled job on your server already works.\"\n        }\n      }, {\n        \"@type\": \"Question\",\n        \"name\": \"How Often Should a WordPress Site Back Up Its Database?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Daily is the standard for any site with active users - posts, comments, orders, or form submissions. The most painful losses are the ones measured in hours of unrecoverable customer data. Sites that rarely change can scale this back to weekly, but the disk cost of a daily SQL dump is so low that there's rarely a reason not to.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"Can a Cron Job Break Your WordPress Site?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Yes, but only the same way any command on your server can break your site, and only within the scope of what your account can already do. Cron runs your commands; it doesn't add new permissions. Auto-updating plugins via cron is the most common way users break their own sites, which is why the pattern most agencies follow is alert-only in cron with manual review before applying updates.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"Do You Still Need Cron-Based Backups if Your Host Already Backs Up Daily?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Not strictly, but the extra layer is cheap insurance. Your host's backups protect against infrastructure failures; your cron-based dumps give you finer-grained recovery points for the kind of mistakes humans make - an accidental deletion, a bad import, a plugin that mangled the database before anyone noticed. The two can easily coexist; they don't duplicate each other.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"What Is the Smallest Interval Cron Can Schedule?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"One minute. The shortest cron pattern is * * * * * - every minute, every hour, every day. Cron doesn't support sub-minute scheduling. For anything that needs to run more frequently, you'll need a long-running script with a sleep loop, or a real job queue.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"How Do You Test a WordPress Cron Job Before Its Scheduled Time?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"The cleanest way is a control panel with a \"run now\" button - the Cron Job Manager in SPanel has one, which executes the job immediately and shows the output in the dashboard. Without that, you can run the command directly in SSH (cron commands are just shell commands), but the SSH environment isn't identical to cron's environment, which is where most subtle failures hide.\"\n        }\n      }]\n    }\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The scheduled blog post you queued for 9 AM Monday went live at 2 PM. Your daily database backup didn&#8217;t &#8230;<\/p>\n","protected":false},"author":106,"featured_media":74648,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_titles_title":"Six Useful Cron Jobs For WordPress Sites %%sep%% %%sitetitle%%","_seopress_titles_desc":"Learn useful WordPress cron jobs for wp-cron, backups, plugin checks, database cleanup, and SSL alerts, plus when SPanel handles them natively.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"categories":[125],"tags":[],"class_list":["post-74647","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-spanel"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/posts\/74647","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/users\/106"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/comments?post=74647"}],"version-history":[{"count":4,"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/posts\/74647\/revisions"}],"predecessor-version":[{"id":74657,"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/posts\/74647\/revisions\/74657"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/media\/74648"}],"wp:attachment":[{"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/media?parent=74647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/categories?post=74647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scalahosting.com\/blog\/wp-json\/wp\/v2\/tags?post=74647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}