DISABLE_WP_CRON = true wp-cron.php एंडपॉइंट को सील (बंद) नहीं करता है; यह केवल वर्डप्रेस को अपना स्वयं का लूपबैक अनुरोध (loopback request) भेजने से रोकता है। फ़ाइल वेब से सुलभ रहती है, इसलिए कोई भी अभी भी इसे हिट कर सकता है और पूरे वर्डप्रेस बूटस्ट्रैप (bootstrap) को मजबूर कर सकता है।

वह छिपा हुआ एंट्री पॉइंट CPU, मेमोरी और PHP वर्कर्स को बर्बाद कर सकता है, खासकर व्यस्त साइटों पर। यदि आपको लगा कि आपने दरवाजा बंद कर दिया है, तो आपने ऐसा नहीं किया है—अभी तक नहीं।

इस सेटिंग को अक्सर गलत क्यों समझा जाता है

जब वर्डप्रेस एक शेड्यूल्ड टास्क चलाता है, तो यह सबसे पहले अपनी wp-cron.php फ़ाइल को एक त्वरित HTTP अनुरोध भेजने का प्रयास करता है। DISABLE_WP_CRON को true पर सेट करने से कोर (core) को उस आंतरिक अनुरोध को छोड़ने के लिए कहा जाता है। कोर वेब-सर्वर कॉन्फ़िगरेशन को नहीं बदलता है, और न ही यह wp-cron.php में कोई ऑथेंटिकेशन लेयर जोड़ता है। स्क्रिप्ट एक सार्वजनिक URL बनी रहती है जो 200 स्टेटस लौटाती है, भले ही PHP प्रक्रिया जल्दी समाप्त हो जाए।

एक हमलावर जो URL का पता लगा लेता है, वह इसे बार-बार पिंग कर सकता है, जिससे हर बार वर्डप्रेस को सभी प्लगइन्स, थीम और डेटाबेस लोड करने के लिए मजबूर होना पड़ता है। शेयर्ड होस्ट या सीमित PHP वर्कर्स वाली साइट पर, वह एकल एंडपॉइंट 'डिनायल-ऑफ-सर्विस' (denial-of-service) वेक्टर बन सकता है।

वास्तव में क्या करने की आवश्यकता है

शेड्यूल्ड काम को सिस्टम-लेवल शेड्यूलर (cron, systemd-timer, आदि) पर ले जाने और सार्वजनिक दरवाजे को बंद करने के लिए, इन पांच चरणों का पालन करें।

1. आंतरिक लूपबैक को अक्षम (Disable) करें

wp-config.php में यह लाइन जोड़ें:

define( 'DISABLE_WP_CRON', true );

यह वर्डप्रेस को अपना स्वयं का HTTP अनुरोध करने से रोकता है, लेकिन यह बाहरी कॉल्स को नहीं रोकता है।

2. वेब-सर्वर पर wp-cron.php को ब्लॉक करें

उदाहरण के लिए, Nginx के साथ, एक location ब्लॉक डालें जो 403 Forbidden लौटाता हो:

location = /wp-cron.php {
    return 403;
}

अब सर्वर PHP शुरू होने से पहले ही अनुरोध को अस्वीकार कर देता है, जिससे बूटस्ट्रैप लागत समाप्त हो जाती है।

3. सुरक्षा जाल (safety net) के रूप में एक mu-plugin जोड़ें

एक must-use प्लगइन (wp-content/mu-plugins में रखा गया) बनाएं जो wp-cron.php तक पहुँचने वाले किसी भी अनुरोध को लॉग करे और 403 के साथ बाहर निकल जाए। यह उन अनुरोधों को पकड़ता है जो किसी तरह सर्वर नियम को बायपास कर जाते हैं—शायद किसी अलग होस्टनाम या CDN एज नियम के माध्यम से।

4. Action Scheduler async कॉल्स को दबाएं (Suppress)

कई प्लगइन्स Action Scheduler लाइब्रेरी का उपयोग करते हैं, जो अपने स्वयं के लूपबैक अनुरोध उत्पन्न कर सकती है। action_scheduler_queue_runner में हुक करें और non-CLI अनुरोधों के लिए जल्दी वापस लौटें (return early), जिससे लाइब्रेरी को अपने स्वयं के दरवाजे खोलने से रोका जा सके।

5. WP-Cron हुक से queue runner को अनहुक (Unhook) करें

डिफ़ॉल्ट Action Scheduler queue runner को हटा दें जो wp cron हुक से जुड़ा होता है। यह सुनिश्चित करता है कि कतार (queue) केवल तभी चले जब आप इसे स्पष्ट रूप से कमांड लाइन से ट्रिगर करते हैं।

काम (Jobs) चलाने का सही तरीका

सार्वजनिक एंडपॉइंट को सील करने के बाद, WP-CLI के माध्यम से प्रति मिनट एक बार (या जितनी बार आपको आवश्यकता हो) वर्डप्रेस को बुलाने के लिए सिस्टम शेड्यूलर का उपयोग करें:

wp cron event run --due-now

वह एकल कमांड एक नियंत्रित वातावरण में कोर cron इवेंट्स और Action Scheduler कतार को प्रोसेस करती है, उसी PHP प्रक्रिया का उपयोग करके जिसका उपयोग आप किसी अन्य CLI कार्य के लिए करेंगे।

लाभ जिन्हें आप माप सकते हैं

  • सुरक्षा (Security) – कोई भी अनधिकृत (unauthenticated) उपयोगकर्ता भारी बैकग्राउंड काम शुरू नहीं कर सकता।
  • प्रदर्शन (Performance) – PHP वर्कर्स वास्तविक आगंतुकों के लिए उपलब्ध रहते हैं; भटके हुए cron हिट्स से होने वाले मेमोरी स्पाइक्स गायब हो जाते हैं।
  • विश्वसनीयता (Reliability) – शेड्यूलिंग सक्रिय (proactive) हो जाती है; आप जानते हैं कि कोई काम कब चलता है क्योंकि यह सिस्टम के cron द्वारा संचालित होता है, न कि किसी आगंतुक के पेज लोड द्वारा।

बदलाव के बाद किन बातों पर नज़र रखें

wp-cron.php के HTTP स्टेटस कोड पर भरोसा न करें; PHP द्वारा ब्लॉक किए जाने पर भी यह 200 लौटा सकता है। इसके बजाय:

  • Action Scheduler कतार (queue) के आकार की निगरानी करें। बढ़ती हुई कतार अक्सर छूटे हुए रन (missed runs) का संकेत देती है।
  • wp-cron.php location ब्लॉक से "403" प्रविष्टियों के लिए सर्वर लॉग की जाँच करें।
  • लोड कम होने की पुष्टि करने के लिए पीक ट्रैफिक के दौरान PHP-FPM या FastCGI प्रोसेस काउंट का निरीक्षण करें।

सावधानी का एक नोट

कुछ प्रशासक DISABLE_WP_CRON को false रखते हैं क्योंकि वे कम ट्रैफिक वाली साइटों पर cron को स्वाभाविक रूप से ट्रिगर करने के लिए निर्भर रहते हैं। ऊपर बताया गया दृष्टिकोण उस निर्भरता को पूरी तरह से हटा देता है, लेकिन यह एक रखरखाव चरण (maintenance step) जोड़ता है: आपको यह सुनिश्चित करना होगा कि सिस्टम शेड्यूलर विश्वसनीय रूप से चले। यदि सर्वर का cron daemon विफल हो जाता है, तो शेड्यूल्ड कार्य रुक जाते हैं। उस खामी से बचने के लिए सेटअप को सिस्टम cron सेवा की निगरानी के साथ जोड़ें।

निष्कर्ष (Bottom line): DISABLE_WP_CRON को true पर सेट करने से केवल वर्डप्रेस को खुद को पिंग करने से रोका जाता है; यह सार्वजनिक wp-cron.php एंडपॉइंट को बंद नहीं करता है। वेब-सर्वर पर फ़ाइल को ब्लॉक करें, एक mu-plugin फ़ॉलबैक जोड़ें, और सभी शेड्यूल्ड काम को WP-CLI के माध्यम से सिस्टम शेड्यूलर के माध्यम से रूट करें। ऐसा करने से साइट सुरक्षित होती है, अनावश्यक PHP कार्य कम होता है, और आपको इस बात पर सटीक नियंत्रण मिलता है कि बैकग्राउंड टास्क कब निष्पादित (execute) होते हैं।