हजारों क्रोन नौकरियों को हटा दें


16

मुझे पता चला कि मेरे WordPress डेटाबेस में 29,000 क्रोन जॉब्स हैं जो डिएक्टिवेट और डिलीट किए गए प्लगइन्स से हैं। मैंने कई ऑप्टिमाइज़र प्लगइन्स आज़माए हैं, लेकिन बड़ी संख्या में क्रोन जॉब्स का मतलब है कि मैं उन्हें प्लगइन्स का उपयोग करके हटा नहीं सकता।

मैंने भी अपने कार्यों में यह कोशिश की। बिना सफलता के:

add_action("init", "clear_crons_left");
function clear_crons_left() {
    wp_clear_scheduled_hook("cron_name");
}

क्या कोई SQL कमांड है जो मैं phpmyadmin में क्रोन हुक द्वारा खोज कर उन्हें हटाने के लिए उपयोग कर सकता हूं?


मुझे WP Bulk delete मिला, carefull के साथ उपयोग किया और एक बार में हटाने के लिए अधिकतम आइटम डाल
दिए

जवाबों:


18

शीघ्र उत्तर और सलाह के लिए धन्यवाद Privateer।

मुझे आपका उत्तर देखने से पहले मैंने इसके चारों ओर एक रास्ता ढूंढ लिया। यहां हजारों पुरानी क्रोन नौकरियों को हटाने के लिए एक कदम-दर-चरण विधि है और किसी और के लिए उपयोग की जा सकती है।

मैंने phpMyAdmin पर लॉग ऑन किया। मैंने अपने डेटाबेस और फिर 'खोज' टैब पर क्लिक किया। मैंने 'क्रोन' में टाइप किया, फिर 'सभी टेबल' को चुना और 'गो' पर क्लिक किया। मैंने अपनी wp_options तालिका में खोज परिणाम सूची को नीचे स्क्रॉल किया। मैंने 'ब्राउज़' पर क्लिक किया। सूची के शीर्ष पर विकल्प_नाम 'क्रोन' था। मैंने 'संपादित करें' पर क्लिक किया, फिर पृष्ठ लोड होने की प्रतीक्षा की। मैंने उस बॉक्स पर क्लिक किया जिसमें क्रोन नौकरियों की सूची दिखाई गई थी। क्रोन सूची इतनी लंबी थी कि मेरे कर्सर को प्रतिक्रिया देने में लगभग 80 सेकंड का समय लगा। मैंने तब कीबोर्ड पर Ctrl-A का उपयोग किया था जो डिलीट बटन को हिट करने से पहले सभी का चयन करता है। मेरे ब्राउज़र को डिलीट पूरा करने में लगभग 2 मिनट पहले लगे (क्रोम टाइम-आउट तो मैंने फ़ायरफ़ॉक्स को काम करने की कोशिश की)।

एक और दो मिनट के बाद मेरे वर्तमान सक्रिय प्लगइन्स के लिए क्रॉन जॉब्स ने सूची को फिर से आबाद किया। 9 क्रोन नौकरियां थीं (29,000 से अधिक नीचे!)। बुरी तरह से कोडित प्लगइन्स से डुप्लिकेट क्रोन नौकरियों के छह साल, जिनमें से कुछ मैं सिर्फ एक दिन के लिए स्थापित करने की कोशिश करता हूं। Wordfence, BackupBuddy, Nextgen Gallery, और AutoOptimizer जैसे सामान्य प्लगइन्स से भी सैकड़ों - इन सभी को मैंने अतीत में अनइंस्टॉल किया था। मेरी साइट अब लोड होती है जैसे कि इसे टर्बो-चार्ज किया गया है। व्यवस्थापक क्षेत्र बहुत तेज है। व्यवस्थापक टाइमआउट त्रुटियां गायब हो गई हैं। मैंने अपनी वेबसाइट का अनुकूलन करने में इतना समय बिताया है कि लोड समय को कम करने की कोशिश कर रहा हूं। मैंने भी मेजबानों को स्थानांतरित किया और अपनी होस्टिंग योजनाओं को अपग्रेड किया। मेरी साइट की गति में वृद्धि नहीं हुई जैसे सभी पुरानी क्रोन नौकरियों को हटाना। मोबाइल डाउनलोड का समय 20 सेकंड से घटकर 6 सेकंड हो गया।

एक समाधान के लिए मेरी खोज में मुझे वेबसाइट के प्रदर्शन पर क्रोन नौकरियों के प्रभाव पर बहुत कम जानकारी मिली। कई लोगों ने कहा कि इससे बहुत कम फर्क पड़ा और क्रोन नौकरियों की एक छोटी संख्या के लिए यह सच है। लेकिन एक वर्डप्रेस साइट के जीवन में वर्षों से मुझे आश्चर्य है कि हटाए गए प्लगइन्स से हजारों पुराने क्रोन जॉब्स नहीं तो सैकड़ों के साथ कितने फूला हुआ है। उपयोगकर्ताओं को अपनी php मेमोरी सीमा की जांच करने के लिए कहने के बजाय, मैं यह सुझाव दूंगा कि डेवलपर्स सबसे पहले उपयोगकर्ताओं से wp_options में क्रोन नौकरियों की संख्या की जांच करने के लिए कहें, जब समस्या-समाधान की घातक मेमोरी त्रुटियों को हल करते हैं। आपको जो भी मिल रहा है उस पर आप हैरान / हैरान हो सकते हैं! :-)


1
मैंने वही समस्या पाई। मेरे पास अब कितनी भी क्रोन नौकरियां नहीं हैं, लेकिन यह डेटाबेस में लगभग 15 एमबी थी। विलोपन के बाद व्यवस्थापक क्षेत्र लोड समय 5-7 से 0.3 सेकंड तक कम हो जाता है। फ्रंटेंड लोड समय 2 से 0.4 सेकंड तक घटा।
एलेक्सी

1
लानत है! इस समाधान ने हमें बचा लिया! इस तालिका में 35000 क्रोन नौकरियां थीं। अब यह टर्बोचार्ज लगता है जैसा कि वर्णित है।
रिकार्डो

वास्तव में यह जानने के लिए बहुत अच्छा है क्योंकि मैं एक ग्राहक के लिए उल्लेखित प्लगइन्स में से एक को स्थापित करने के लिए सोच रहा था। इसलिए अब मुझे पता है कि जब प्रदर्शन धीरे-धीरे बिगड़ता है तो क्या देखना चाहिए।
लोटेकसून

10

प्रयत्न

SELECT * FROM `wp_options` WHERE option_name = 'cron'

यदि आपको लगता है कि आप कोशिश कर सकते हैं:

  • SQL में: UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
  • WordPress में: update_option('cron', '');

आपको या तो क्रोन विकल्प को हटाने की आवश्यकता हो सकती है या मूल्य को एक खाली क्रमबद्ध सरणी में सेट किया जा सकता है।

Update_option का उपयोग करना सुरक्षित होगा क्योंकि मैं निश्चित नहीं हूं कि क्या मूल्य एक क्रमबद्ध खाली सरणी या एक खाली स्ट्रिंग होना चाहिए। आप wp- / / options.php में जाँच कर सकते हैं ... लेकिन update_option का उपयोग डेटाबेस की चिंता किए बिना इसे ठीक से संभाल लेंगे।


7

WP-CLI का उपयोग करके वर्डप्रेस क्रॉन घटनाओं को कमांड लाइन से भी साफ़ किया जा सकता है :

wp cron event list
wp cron event delete your_example_event

Wp-cli डॉक्स में अधिक जानकारी ।


3
या सभी घटनाओं को हटा देंwp option delete cron
शमूएल एल्ह

1
wp option delete cronकाम करता है जब विकल्पों में भरवां हजारों क्रोन नौकरियां हैं। ये बुरे काम ज्यादातर गलत प्लगइन्स से होते हैं, गलत तरीके से क्रॉन करते हैं।
स्वशा घोष

6

एक और भी सरल समाधान है कि delete_option( 'cron' );किसी प्लगइन में एक बार कॉल करें । सभी स्वचालित रूप से जोड़े गए क्रोन जॉब्स आपकी साइट की अगली यात्रा / अनुरोध पर फिर से जुड़ जाएंगे।

एक मामले के रूप में (म्यू) प्लगइन जो केवल तभी चलता है जब आप इसे सक्रिय करते हैं:

<?php
/** Plugin Name: Clean Cron */
register_activation_hook( __FILE__, function()
{
    delete_option( 'cron' );
} );

धन्यवाद केसर! उन लोगों के लिए जो प्लगइन्स बनाने / संपादित करने में सहज नहीं हैं (यह सरल है!), आप अपने फ़ंक्शंस में उपयोग कर सकते हैं जो आपके फ़ंक्शंस में उल्लेखित है। बस इसे जोड़ें, इसे सहेजें, अपनी साइट लोड करें, फिर इसे हटा दें और इसे फिर से सहेजें।
प्राइवेटर

प्लगइन सक्रियण पर बनाई गई क्रोन नौकरियों के बारे में क्या? इन क्रॉन जॉब्स को तब तक दोबारा नहीं बनाया जाएगा, जब तक आप प्लगइन को डी-एक्टिवेट नहीं करते हैं।
21

खैर, यह डिफ़ॉल्ट रूप से संभव नहीं है , न तो इसके साथ और न ही अन्य प्रश्नों के साथ। आपको क्या करना है या तो डे- और उन प्लगइन्स (~ 3 मिनट का काम) को फिर से सक्रिय करना है, या - यदि आप एक स्वचालित उत्तर की तलाश कर रहे हैं - उन प्लगइन्स में फ़ंक्शन खोजें और उन्हें अपने प्लगइन के भीतर से ट्रिगर करें।
कैसर

1

यदि कोई व्यक्ति एक विशिष्ट क्रोन नाम ('CRON_NAME' कहना चाहता है), यह समाधान मेरे लिए काम करता है:

    $crons = _get_cron_array();
    //echo "Found total ".count($crons)."<br />";
    //Keep only the ones that don't match the cron name
    $updated = array_filter($crons, function($v){return !array_key_exists("CRON_NAME",$v);});
    //echo "Reduced to ".count($updated)."<br />";        
    _set_cron_array($updated);

1

मेरे पास लंबित क्रोन नौकरियों से भरा एक साल था, इस एकल डेटाबेस प्रविष्टि के लिए लगभग 5 एमबी डेटा। डेटाबेस से क्रॉन नौकरियों को हटा दिया गया। Wp-config.php में अक्षम क्रॉन जॉब्स

Cpanel में मैन्युअल क्रोन जॉब सेट करें। अब मेरी साइट सचमुच उड़ान भर रही है। मैं सर्वरों को अपग्रेड कर रहा था, अधिक CPU / RAM खरीद रहा था, लेकिन सभी पैसे और समय की बर्बादी कर रहे थे।

सभी लंबित क्रॉन नौकरियों को हटाने के लिए इस क्वेरी को phpmyadmin> Run क्वेरी में चलाएं:

UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'

बहुत बहुत धन्यवाद Pádraig ir Beirn।


आपका स्वागत है प्रीतिंदर! मुझे खुशी है कि यह मदद की थी। साथ ही लंबित क्रॉन नौकरियों पर टिप के लिए धन्यवाद।
पड्रेग ir बीरन

0

यदि आप अपने क्रोन कार्यों को इस तरह से साफ़ करते हैं और आप UpdateraftPlus का उपयोग करते हैं, तो क्रॉन कार्यों को पुन: उत्पन्न करने के लिए आपको अपनी सेटिंग्स को फिर से सहेजना होगा। जब तक आप ऐसा नहीं करते, तब तक आपके स्वचालित बैकअप नहीं चलेंगे (लेकिन मैनुअल बैकअप होगा)।

सेटिंग्स अभी भी वहाँ होंगी, और आपको कुछ भी संपादित करने की आवश्यकता नहीं है। बस [UpdateraftPlus शीर्ष मेनू] -> सेटिंग्स पर जाएं, और नीचे स्क्रॉल करें और "परिवर्तन सहेजें" पर क्लिक करें।


0

मैं यहाँ भारी मात्रा में sm_pingcronjobs की वजह से मिलाwp_options । यदि यह आपकी समस्या है, तो आप निम्नलिखित प्रयास कर सकते हैं:

यदि आप phpmyadmin तक पहुँच नहीं है, तो इसे functions.php (चाइल्ड थीम) में रखें, खासकर यदि आपकी साइट पिंग क्रोनॉजर (sm_ping) के साथ फूला हुआ है:

if (isset($_GET['doing_wp_cron'])) {
remove_action('do_pings', 'do_all_pings');
wp_clear_scheduled_hook('do_pings');
}

0

मैं इसी तरह के मुद्दे पर भाग गया, जहां मेरी अपनी कोडिंग त्रुटियों के कारण, एक साइट पर एक विशेष क्रोन नौकरी की हजारों प्रतियां जोड़ी गईं। Wp_clear_scheduled_hook फ़ंक्शन समय-समय पर विफल और प्रकट हुआ। मैं इसके चारों ओर एक स्क्रिप्ट के साथ मिला जो सरणी के भीतर क्रोन फ़ंक्शन के सभी उदाहरणों को परेशान करता है और फिर विकल्प तालिका में नए क्रोन विकल्प के रूप में फ़िल्टर किए गए सरणी को जोड़ता है। निचे देखो।

इस तरह, मैं पहले से साइट पर जोड़े जाने वाले वांछनीय क्रोन नौकरियों को उड़ाने से बच गया।

इसे एक फ़ंक्शन के रूप में संशोधित किया जा सकता है जो समाप्त करने के लिए हैंडल की एक सरणी लेता है या संरक्षित किए जाने वाले हैंडल की एक सरणी लेता है।

$crons = _get_cron_array();
    $hook = 'tj_flush_w3tc_cache';
    foreach ( $crons as $timestamp => $cron ) {
    if ( isset( $cron[ $hook ] ) ) {
        unset($cron[$hook]);
    }
    if(!empty($cron))
        $newcron[$timestamp] = $cron;       
    }
    update_option('cron',$newcron);

0

मेरे पास सभी क्रोन घटनाओं को हटाने का एक बहुत सरल तरीका है। इससे पहले, आपको wp-config में WP Cron को DISABLE करना होगा। फिर, आप Plugin WP Control को इंस्टॉल करें, फिर टूल मेनू पर जाएं> Cron इवेंट> उन सभी को हटाएं> सभी को हटाएं> पर क्लिक करें। क्या आप इसे आजमा सकते हैं? धन्यवाद।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.