क्रोन ने दौड़ना बंद कर दिया; लॉग कहते हैं: "क्रोन को फिर से चलाने का प्रयास करते हुए यह पहले से ही चल रहा है।"


11

शीर्षक के अनुसार इस समस्या के निवारण और समाधान के लिए क्या कदम हैं?

जब मैं मैन्युअल रूप से चलाने का प्रयास करता हूं, तो मुझे तुरंत एक पृष्ठ मिलता है, और त्रुटि संदेश "पहले से ही चल रहा है, जबकि क्रोन को फिर से चलाने का प्रयास।"


मुझे अपने सिर के ऊपर से याद नहीं आ रहा था कि db cron में क्या दिखता है, लेकिन एक त्वरित google "क्रोन को फिर से चलाने की कोशिश कर रहा है, जबकि यह पहले से चल रहा है" मुझे digitaledgesw.com/node/21 की ओर इशारा किया , यह हो सकता है D7 पर लागू होते हैं
जिमजम्मा

यह बहुत अजीब है। उस संदेश को कोर के लिए कोड में ठीक एक बार पाया जाता है, ठीक उस चर की जाँच के बाद (drupal_cron_run में lock_acquire के माध्यम से)। यदि आप अधिक जानकारी / लक्षण पोस्ट करते हैं जो इंगित करते हैं कि यह वास्तव में अलग है, तो मैं इसे फिर से खोलूंगा।
mpdonadio

सुझाव: क्या आप हर 3 मिनट चलाने के लिए एक नया ड्रुपल और क्रोन सेट करने की कोशिश कर सकते हैं और देख सकते हैं कि क्या आपके पास एक ही प्रभाव है !!!
एब्रेड्रेड 1

बस चला:drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
kenorb

4
TO FUTURE READERS: वर्तमान में स्वीकृत उत्तर Drupal 7, Drupal संस्करण के लिए सही नहीं है, जिसके लिए प्रश्न है। यह Drupal 6 के लिए मान्य है, लेकिन Drupal 7 कोड बदल गया; यह सिर्फ ऐसा होता है कि Drupal 7 Drupal 6 से बना हुआ है जिसे साफ नहीं किया गया है।
कियमलुनो

जवाबों:


12

क्रोन सेमाफोर शायद बंद है। आप अपने कोड में कहीं से भी drupal_cron_cleanup () कॉल करने की कोशिश कर सकते हैं (जो क्रोन द्वारा आह्वान नहीं किया जाता है) और जो आपके क्रोन सेमीफोर चर को अनलॉक करना चाहिए।

यदि आपने Drupal 6 में ड्रश कॉन्फ़िगर किया है तो आप भी कोशिश कर सकते हैं:

$ drush vdel -y cron_semaphore

3
या इसे चर तालिका से मैन्युअल रूप से हटाएं यदि आपके पास ड्रश के बजाय डीबी पहुंच है।
Malks

8
मत भूलो कि इन मूल्यों को तालिका में कैश किया गया है cache_bootstrap
tostinni

1
कृपया तालिका का सटीक नाम क्या है क्योंकि मुझे चर तालिका में कोई cron_semaphore नहीं मिला है
मुहम्मद अमीन बोरकड़ी

2
जब मैं ऊपर ड्रश कमांड चलाता हूं तो मुझे "cron_semaphore नहीं मिलता है।" कोई विचार?
निगेल वाटर्स

1
@NigelWaters ड्रोन 7 में क्रोन सेमाफोर एक लॉक बन गया, लेकिन drupal_cron_cleanup()लगता है कि इसे अपडेट नहीं किया जाएगा।
kiamlaluno

19

सारांश

यदि आप देख रहे हैं तो त्रुटि संदेश तब होगा जब निम्न दो शर्तें पूरी होंगी:

  • आप क्रॉन जॉब्स खत्म (त्रुटि) नहीं करते हैं या समाप्त होने में 4 मिनट से अधिक समय लेते हैं;
  • आप प्रत्येक 4 मिनट की तुलना में अधिक बार क्रोन का आह्वान करते हैं (अपने क्रॉटाब की सेटिंग के अनुसार, ड्रुपल में सेटिंग नहीं)

यह त्रुटि संदेश इसलिए क्रोन कार्यों का एक लक्षण है जो या तो विफल हो रहा है या चलाने में बहुत लंबा समय ले रहा है। (नोट: मुझे लगता है कि आप पहले से ही अपराधी को ढूंढ चुके हैं, लेकिन मैं उन लोगों के लिए एक उत्तर जोड़ना चाहता था, जो इस पृष्ठ को खोजों के माध्यम से खोजते हैं, जैसा कि मैंने किया था)

पृष्ठभूमि

समझने की पहली बात यह है कि ड्रुपल क्रोन कार्यों को कैसे चलाया जाता है। ड्रुपल क्रोन को नियमित अंतराल पर लागू किया जाता है - या तो आपके सर्वर पर क्रोन जॉब के माध्यम से, या हर पेज लोड होने के बाद यदि आप गरीब आदमी के क्रोन का उपयोग करते हैं जो कि ड्रुपल डिफ़ॉल्ट है।

क्रोन कार्यों को चलाने के लिए जरूरी नहीं है कि हर बार क्रोन का आह्वान किया जाए - हालांकि ड्रुपल में एक सेटिंग है (डिफ़ॉल्ट 3 घंटे है) जो कहता है कि क्रोन कार्यों को कितनी बार चलाया जाना चाहिए। लेकिन यह 3 घंटे की देरी केवल तभी लागू होती है जब क्रोन कार्य सफलतापूर्वक समाप्त हो गए हों।

ड्रुपल 7 में, क्रोन ड्रुपल के लॉकिंग तंत्र का उपयोग करता है , जो एक सहकारी, सलाहकार लॉक सिस्टम प्रदान करता है। इस लॉक सिस्टम की एक विशेषता यह है कि ताले एक निश्चित समय के बाद समाप्त हो जाते हैं। क्रोन के मामले में, यह 4 मिनट के बाद समाप्त हो जाता है - इसलिए यदि आपका क्रोन हर 3 मिनट में लागू होता है और पिछली क्रॉन नौकरी उस समय तक समाप्त नहीं हुई थी (या तो दुर्घटनाग्रस्त हो गई थी या बहुत धीमी थी), तो आपको वास्तव में यह त्रुटि संदेश मिलेगा ।

तथ्य यह है कि आप क्रोन को हर 12 घंटे में सेट करते हैं, इससे कोई फर्क नहीं पड़ता है - क्योंकि ड्रूपल क्रोन कार्य विफल हो रहा है / बहुत लंबा समय ले रहा है, ड्रुपल यह मानता है कि इसे नहीं चलाया गया है इसलिए क्रोन के आह्वान होते ही इसे फिर से चलाने की कोशिश की जाती है। बारह घंटे की देरी केवल सफल क्रोन रन पर लागू होती है।

ड्रुपल 7 में क्रोन सेमीफोर चर का कोई अस्तित्व नहीं है - यह ड्रुपल के पुराने संस्करण के लिए था। Drupal 7 में मैन्युअल रूप से लॉक जारी करने का कोई विश्वसनीय तरीका नहीं है, क्योंकि लॉकिंग बैकेंड बदल सकता है - हालाँकि यदि आप कोर लॉकिंग तंत्र का उपयोग कर रहे हैं तो आप डेटाबेस को संपादित करके क्रोन लॉक जारी कर सकते हैं:

DELETE FROM semaphore WHERE name = 'cron';

लेकिन ऐसा करने से आप केवल लक्षणों को ठीक कर रहे होंगे - जिस समस्या के समाधान की आवश्यकता है, वह है क्रोन फेल होना / इतना लंबा चलना।


मुझे यह संदेश मिल रहा है, लेकिन जब मैं cron_debug चलाता हूं तो सभी क्रॉन जॉब्स सफलतापूर्वक समाप्त हो जाते हैं और जल्दी से दौड़ते हैं (कोर अपडेट को छोड़कर जो ~ 5 सेकंड लगते हैं)। अगर इस समस्या का स्रोत क्रोन दिनचर्या धीमा या विफल हो रहा है, तो cron_debug उन्हें उजागर क्यों नहीं करेगा?
दोगुना करें

1
मुझे नहीं पता कि cron_debug मॉड्यूल कैसे काम करता है, इसलिए मैं वास्तव में इस पर टिप्पणी नहीं कर सकता। चर 'cron_safe_threshold' का मान क्या है? Data सेमाफोर ’तालिका किस डेटा की है?
एलिस हेटन

1
विस्तृत विवरण के लिए Drupal 7. +1 का सही उत्तर है।
कियमलुनो

BTW, यदि क्रोन आपके लिए असफल हो रहा है, तो क्रोन डीबग मॉड्यूल का उपयोग करके देखें कि यह किस मॉड्यूल पर लटका हुआ है - 10 में से 9 बार यह सर्च मॉड्यूल है। खोज मॉड्यूल को बंद करने का प्रयास करें और फिर क्रोन को मैन्युअल रूप से चलाएं और देखें कि क्या होता है। नोड्स को यह इंडेक्स करने की कोशिश कर रहा है: drupal.stackexchange.com/questions/22825/…
Dan Mantyla

4

cron_semaphoreचर Drupal 6 में अस्तित्व में थे, लेकिन आप, Drupal 7 का उपयोग कर रहे हैं ताकि सेमाफोर ताले अलग तालिका कहा जाता है में चले गए semaphore

तो क्रोन सेमाफोर को अनलॉक करने का समाधान होगा:

द्रुपाल al

drush sqlq "TRUNCATE semaphore"

द्रुपाल ६

drush -y vdel cron_semaphore 

3
ड्रुपल 7 के लिए "कम चरम" संस्करण:drush sql-query "DELETE FROM semaphore WHERE name='cron'"
टैनियस

2

आप क्रोन डीबग मॉड्यूल का उपयोग करके क्रोन को डीबग कर सकते हैं ।

क्रोन डिबग आपको क्रोन प्रक्रियाओं को खोजने में मदद करेगा जो कि

  • प्रोग्रामिंग या रनटाइम त्रुटियों के कारण विफल
  • टाइम आउट (PHP, सर्वर, डेटाबेस)
  • बहुत धीमे हैं

क्रोन डीबग आपको दूसरों को नहीं चलाने के दौरान विशिष्ट क्रोन कार्यों का परीक्षण करने की भी अनुमति देगा। यह क्रोन फ़ंक्शंस विकसित करने के लिए अच्छा हो सकता है जहां आप हर बार अपने स्वयं के फ़ंक्शन का परीक्षण करने के लिए सभी रखरखाव, अलर्ट और अन्य कार्यों के साथ एक पूर्ण cron.php चलाना नहीं चाहते हैं।


1
यह मॉड्यूल मेरे लिए एक जीवन रक्षक था!
दान मेंटिला

हाँ, यह मॉड्यूल अच्छा है, यह क्रॉन जॉब को डिबग करने में मदद करता है।
निशांत

1

इस तरह से मैंने क्रोन मुद्दे को हल किया:

  1. PhpMyAdmin के माध्यम से, मैंने सेमीफ़ोर टेबल में देखा और पंक्ति को हटा दिया name = cron
  2. मैंने कमांड लाइन के माध्यम से "ड्रश क्रोन" चलाया
  3. मैंने एक त्रुटि संदेश देखा जिसने मुझे इस मुद्दे का सुराग दिया; यह आपके लिए अलग हो सकता है, लेकिन मेरे लिए हाल ही में अनइंस्टॉल किया गया मॉड्यूल जो एक स्थापित मॉड्यूल के साथ PHP लाइब्रेरी साझा कर रहा था, एक त्रुटि पैदा कर रहा था


0

Drupal 7 पर, एक और विकल्प के रूप में,

के माध्यम से drush cronमैं हो रही थी,

WD cron: Attempting to re-run cron while it is already running.       [warning]
Cron run failed.                                                      [error]

यह विकास के माहौल पर था और इसलिए हुआ क्योंकि एक पिछला क्रोन चल रहा था और बाधित हो गया था।

पर includes/common.inc, लाइन 5413, या आसपास में, तो आप इस ब्लॉक मिल जाएगा, https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0)) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

ifएक के साथ संशोधित करें && FALSE,

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0) && FALSE) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

और रेरून क्रोन। वह इसे चलाने की अनुमति देगा।

कृपया इसे तैनात न करें और इसे पूरा होने के बाद वापस लौटा दें। यह डिबगिंग के साथ भी मदद करता है।


-1

मैं इसके खिलाफ कुछ बार आया हूं। Drupal 6 में यदि आप ड्रश का उपयोग नहीं करते हैं तो आप इसे इस तरह से ठीक कर सकते हैं:

1 चर तालिका से cron_% चर निकालें।

SELECT * FROM variable WHERE name like "cron%";

DELETE FROM variable WHERE name like "cron%";

2 स्पष्ट Drupal कैश पर: / व्यवस्थापक / सेटिंग्स / प्रदर्शन

पृष्ठ के निचले भाग में 'स्पष्ट कैश्ड डेटा' बटन दबाकर।

व्यवस्थापक पैनल / व्यवस्थापक / रिपोर्ट / स्थिति / रन-क्रॉन से 3 रन क्रोन इसे कॉमैंड लाइन से नहीं चलाते क्योंकि इससे समस्याएं हो सकती हैं।

4 जांचें कि अगला स्वचालित क्रोन रन सामान्य रूप से पूरा होता है।


Drupal उत्तर में आपका स्वागत है! प्रश्न Drupal 7 के बारे में है। उस डेटाबेस तालिका से पंक्तियों को हटाने से बहुत अधिक प्रभाव नहीं होगा।
कियमलुनो

आह, मैंने केवल उत्तर जोड़ा क्योंकि यह विशेष रूप से नहीं कहा गया था कि यह ओपी में ड्रुपल 7 के लिए था। यह ड्रुपल 6 के लिए अच्छी तरह से काम करता है, और सामान्य से अधिक पूर्ण है 'सेमाफोर हटाएं' उत्तर। मुझे लगा कि यह मददगार होगा यदि कोई भी यहां d6 से समाप्त हो जाए। क्या वह गलत था? मुझे लगता है कि इसके लिए नीचे चिह्नित किया गया है।
munkiepus

कमांड लाइन भाग से रन क्रोन को निकालने के लिए बस अपडेट किया गया, बस यह पता चला कि यह समस्या पैदा कर सकता है
munkiepus

-1

आप xdebug का उपयोग करके डीबग कर सकते हैं, व्यवस्थापक इंटरफ़ेस से क्रोन चला सकते हैं व्यवस्थापक> कॉन्फ़िगरेशन> सिस्टम> क्रॉन।

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