DISABLE_WP_CRON = true అనేది wp-cron.php ఎండ్పాయింట్ను (endpoint) మూసివేయదు; ఇది కేవలం WordPress తన స్వంత లూప్బ్యాక్ రిక్వెస్ట్ను (loopback request) పంపకుండా మాత్రమే ఆపుతుంది. ఆ ఫైల్ వెబ్ ద్వారా అందుబాటులో ఉంటుంది, కాబట్టి ఎవరైనా దానిని యాక్సెస్ చేసి పూర్తి WordPress బూట్స్ట్రాప్ (bootstrap) ప్రక్రియను ప్రారంభించవచ్చు.
ఆ దాగి ఉన్న ఎంట్రీ పాయింట్ CPU, మెమరీ మరియు PHP వర్కర్లను వృథా చేయవచ్చు, ముఖ్యంగా రద్దీగా ఉండే సైట్లలో. మీరు ఆ తలుపును మూసివేసేశారని అనుకుంటే, మీరు ఇంకా అలా చేయలేదని అర్థం.
ఈ సెట్టింగ్ ఎందుకు తరచుగా తప్పుగా అర్థం చేసుకుంటున్నారంటే
WordPress ఒక షెడ్యూల్ చేయబడిన టాస్క్ను (scheduled task) రన్ చేసినప్పుడు, అది మొదట తన స్వంత wp-cron.php ఫైల్కు ఒక చిన్న HTTP రిక్వెస్ట్ను పంపుతుంది. DISABLE_WP_CRON ను true గా సెట్ చేయడం వల్ల, ఆ అంతర్గత రిక్వెస్ట్ను స్కిప్ చేయమని కోర్ (core) కి సూచించినట్లు అవుతుంది. కానీ కోర్, వెబ్-సర్వర్ కాన్ఫిగరేషన్ను మార్చదు, లేదా wp-cron.php కి ఎటువంటి అథెంటికేషన్ లేయర్ను (authentication layer) జోడించదు. PHP ప్రాసెస్ త్వరగా ఆగిపోయినప్పటికీ, ఆ స్క్రిప్ట్ ఒక పబ్లిక్ URL గానే ఉంటుంది మరియు 200 స్టేటస్ను రిటర్న్ చేస్తుంది.
ఆ URLను కనుగొన్న అటాకర్ (attacker) దానిని పదేపదే పింగ్ చేయవచ్చు, దీనివల్ల ప్రతిసారీ WordPress లోని అన్ని ప్లగిన్లు, థీమ్లు మరియు డేటాబేస్ను లోడ్ చేయాల్సి వస్తుంది. షేర్డ్ హోస్ట్ లేదా పరిమిత PHP వర్కర్లు ఉన్న సైట్లో, ఆ ఒక్క ఎండ్పాయింట్ 'denial-of-service' వెక్టర్గా మారవచ్చు.
నిజంగా ఏమి చేయాలి
షెడ్యూల్ చేయబడిన పనులను సిస్టమ్-లెవల్ షెడ్యూలర్కు (cron, systemd-timer, మొదలైనవి) మార్చడానికి మరియు పబ్లిక్ ఎంట్రీని మూసివేయడానికి, ఈ ఐదు దశలను అనుసరించండి.
1. అంతర్గత లూప్బ్యాక్ను నిలిపివేయండి
wp-config.php లో ఈ లైన్ను జోడించండి:
define( 'DISABLE_WP_CRON', true );
ఇది WordPress తన స్వంత HTTP రిక్వెస్ట్ను పంపకుండా ఆపుతుంది, కానీ ఇది ఎక్స్టర్నల్ కాల్స్ను (external calls) ఆపదు.
2. వెబ్-సర్వర్లో wp-cron.php ని బ్లాక్ చేయండి
ఉదాహరణకు, Nginx లో, 403 Forbidden రిటర్న్ చేసే ఒక location బ్లాక్ను ఇన్సర్ట్ చేయండి:
location = /wp-cron.php {
return 403;
}
ఇప్పుడు PHP ప్రారంభం కాకముందే సర్వర్ ఆ రిక్వెస్ట్ను తిరస్కరిస్తుంది, దీనివల్ల బూట్స్ట్రాప్ ఖర్చు (bootstrap cost) తగ్గుతుంది.
3. సేఫ్టీ నెట్గా ఒక mu-plugin ని జోడించండి
wp-cron.php కి చేరుతున్న ఏ రిక్వెస్ట్నైనా లాగ్ (log) చేసి, 403 తో ఎగ్జిట్ అయ్యేలా ఒక must-use ప్లగిన్ను (wp-content/mu-plugins లో ఉంచండి) సృష్టించండి. ఇది సర్వర్ రూల్ను ఏదో ఒక విధంగా బైపాస్ చేసే రిక్వెస్ట్లను (బహుశా వేరే హోస్ట్నేమ్ లేదా CDN ఎడ్జ్ రూల్ ద్వారా) పట్టుకుంటుంది.
4. Action Scheduler async కాల్స్ను నిరోధించండి
చాలా ప్లగిన్లు Action Scheduler లైబ్రరీని ఉపయోగిస్తాయి, ఇది తన స్వంత లూప్బ్యాక్ రిక్వెస్ట్లను సృష్టించవచ్చు. action_scheduler_queue_runner కి హుక్ (hook) చేసి, non-CLI రిక్వెస్ట్ల కోసం త్వరగా రిటర్న్ అయ్యేలా చేయండి, తద్వారా ఆ లైబ్రరీ తన స్వంత తలుపులను తెరిచే ప్రయత్నం చేయకుండా నిరోధించవచ్చు.
5. WP-Cron హుక్ నుండి క్యూ రన్నర్ను అన్హుక్ చేయండి
wp cron హుక్కు అనుసంధానించబడిన డిఫాల్ట్ Action Scheduler క్యూ రన్నర్ను తొలగించండి. దీనివల్ల మీరు కమాండ్ లైన్ నుండి స్పష్టంగా ట్రిగ్గర్ చేసినప్పుడు మాత్రమే క్యూ రన్ అవుతుంది.
పనులను సరైన పద్ధతిలో రన్ చేయడం
పబ్లిక్ ఎండ్పాయింట్ మూసివేసిన తర్వాత, WP-CLI ద్వారా ప్రతి నిమిషానికి ఒకసారి (లేదా మీకు కావలసిన సమయానికి) WordPress ని పిలవడానికి సిస్టమ్ షెడ్యూలర్ను ఉపయోగించండి:
wp cron event run --due-now
ఆ ఒక్క కమాండ్ కోర్ క్రోన్ ఈవెంట్లను మరియు Action Scheduler క్యూను నియంత్రిత వాతావరణంలో ప్రాసెస్ చేస్తుంది, దీని కోసం మీరు ఇతర CLI టాస్క్ల కోసం ఉపయోగించే అదే PHP ప్రాసెస్ను ఉపయోగిస్తుంది.
మీరు కొలవగలిగే ప్రయోజనాలు
- Security – ఎటువంటి అథెంటికేషన్ లేని యూజర్ భారీ బ్యాక్గ్రౌండ్ పనులను ప్రారంభించలేరు.
- Performance – PHP వర్కర్లు నిజమైన సందర్శకుల కోసం అందుబాటులో ఉంటారు; అనవసరమైన క్రోన్ హిట్ల వల్ల కలిగే మెమరీ స్పైక్స్ (memory spikes) మాయమవుతాయి.
- Reliability – షెడ్యూలింగ్ అనేది ప్రోయాక్టివ్గా మారుతుంది; జాబ్ ఎప్పుడు రన్ అవుతుందో మీకు ఖచ్చితంగా తెలుస్తుంది, ఎందుకంటే ఇది సందర్శకుడి పేజీ లోడ్ ద్వారా కాకుండా సిస్టమ్ క్రోన్ ద్వారా నడుస్తుంది.
మార్పు చేసిన తర్వాత ఏమి గమనించాలి
wp-cron.php యొక్క HTTP స్టేటస్ కోడ్పై ఆధారపడకండి; PHP ద్వారా బ్లాక్ చేయబడినప్పుడు కూడా అది 200 రిటర్న్ చేయవచ్చు. దానికి బదులుగా:
- Action Scheduler క్యూ పరిమాణాన్ని (queue size) పర్యవేక్షించండి. క్యూ పెరుగుతుంటే, అది జాబ్స్ మిస్ అవుతున్నాయని సూచిస్తుంది.
- wp-cron.php location బ్లాక్ నుండి వచ్చే “403” ఎంట్రీల కోసం సర్వర్ లాగ్లను తనిఖీ చేయండి.
- లోడ్ తగ్గిందో లేదో నిర్ధారించుకోవడానికి, రద్దీ సమయాల్లో PHP-FPM లేదా FastCGI ప్రాసెస్ కౌంట్లను గమనించండి.
ఒక హెచ్చరిక
తక్కువ ట్రాఫిక్ ఉన్న సైట్లలో క్రోన్ సహజంగా ట్రిగ్గర్ అవుతుందని కొందరు అడ్మినిస్ట్రేటర్లు DISABLE_WP_CRON ను false గా ఉంచుతారు. పైన పేర్కొన్న విధానం ఆ ఆధారితాన్ని పూర్తిగా తొలగిస్తుంది, కానీ ఇది ఒక మెయింటెనెన్స్ స్టెప్ను జోడిస్తుంది: సిస్టమ్ షెడ్యూలర్ నమ్మదగినదిగా నడుస్తుందని మీరు నిర్ధారించుకోవాలి. సర్వర్ యొక్క క్రోన్ డెమొన్ (cron daemon) విఫలమైతే, షెడ్యూల్ చేయబడిన పనులు ఆగిపోతాయి. ఆ సమస్యను నివారించడానికి, ఈ సెటప్తో పాటు సిస్టమ్ క్రోన్ సర్వీస్ను పర్యవేక్షించడం కూడా చేయండి.
ముగింపు: DISABLE_WP_CRON ను true గా సెట్ చేయడం వల్ల WordPress తనను తాను పింగ్ చేయడం మాత్రమే ఆగుతుంది; ఇది పబ్లిక్ wp-cron.php ఎండ్పాయింట్ను మూసివేయదు. వెబ్-సర్వర్లో ఆ ఫైల్ను బ్లాక్ చేయండి, ఒక mu-plugin ఫాల్బ్యాక్ను జోడించండి మరియు షెడ్యూల్ చేయబడిన అన్ని పనులను WP-CLI ద్వారా సిస్టమ్ షెడ్యూలర్కు పంపండి. ఇలా చేయడం వల్ల సైట్ సురక్షితంగా ఉంటుంది, అనవసరమైన PHP పనులు తగ్గుతాయి మరియు బ్యాక్గ్రౌండ్ టాస్క్లు ఎప్పుడు అమలు కావాలనే దానిపై మీకు ఖచ్చితమైన నియంత్రణ లభిస్తుంది.
