Magento 1.9.1 cron_schedule हमेशा के लिए नहीं चुना गया है


12

मैंने लगभग 3 दिन बिताए और निर्धारित कार्यों को संसाधित करने के लिए मैगेंटो क्रोन को समझने और बनाने में सक्षम था। मैं Magento 1.9.1.0 चला रहा हूं और हाल ही में देखा गया कि ऑर्डर ईमेल अब तुरंत भेजने के बजाय कतार में हैं। मैं आवश्यकता को समझता हूं लेकिन कतारों को चुनने के लिए प्रणाली बनाने में सक्षम नहीं हो सकता।

यहाँ क्रोनजोब के लिए मेरा दर्शन है। यहाँ छवि विवरण दर्ज करें

यहाँ मेरी क्रोनजॉब कमांड लाइन है। यहाँ छवि विवरण दर्ज करें

यहां बताया गया है कि कार्य क्रोन_स्क्रूइड टेबल में कैसे बनाए जाते हैं। यहाँ छवि विवरण दर्ज करें

चूंकि रिकॉर्ड cron_schedule तालिका में बनाए गए हैं, मुझे लगता है कि क्रोन हर 5 मिनट में एक बार चल रहा है। अगर मैं मैन्युअल रूप से PhpMyAdmin के माध्यम से इन रिकॉर्ड को हटाता हूं, तो रिकॉर्ड कुछ समय बाद अपने आप बन जाते हैं।

लेकिन कार्यों की स्थिति 'लंबित' रहती है और कभी पूरी नहीं होती है। सुनिश्चित नहीं है कि मेरे कॉन्फ़िगरेशन में कुछ गलत है या मुझे कुछ याद आ रहा है। क्या कोई मेरी मदद कर सकता है कि निर्धारित कार्य को समय पर कैसे पूरा किया जाए। इसके अलावा एक नौकरी कोड के लिए कई रिकॉर्ड क्यों बनाए जाते हैं?

अपडेट करें

मैंने पूरी तालिका साफ कर दी और क्रोन ने अनुसूचित नौकरियां पैदा कीं। सभी नौकरियां लंबित स्थिति में हैं और कभी भी 60 मिनट से अधिक इंतजार नहीं करना चाहिए। Magento 1.9.1 में कुछ गलत है

अपडेट 11/02: आज मैंने प्रक्रिया पर कुछ और विश्लेषण किया।

मैंने नीचे के रूप में cron.php का संपादन किया

echo 'iam before mdefault 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
echo 'iam before malways 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
echo 'i returned success';

मैंने Mage_Cron_Model_Observer वर्ग को नीचे के रूप में संपादित किया है

public function dispatch($observer) {
  echo 'iam inside dispath';

मेरी समझ यह थी कि क्रोन जब चलता है -मॉडफॉल्ट होता है तो इसे डिस्पैच फ़ंक्शन को कॉल करना चाहिए और निष्पादन होगा। लेकिन जो हुआ वह क्रोन आउटपुट में नीचे था।

Content-type: text/html

iam before mdefault 1iam before malways 1i returned success

इसका मतलब यह है कि प्रेषण अटल नहीं कहा जाता है ...

एक और कोशिश

मैंने मैन्युअल रूप से चर को बदल दिया है $isShellDisabled = true;और मैंने नीचे cron.php को बदल दिया है।

if ($isShellDisabled) {
  echo 'before always';
  Mage::dispatchEvent('always');
  echo 'after always';
  Mage::dispatchEvent('default');
  echo 'after default';
} else {
  Mage::dispatchEvent($cronMode);
}

उपरोक्त के लिए क्रोन आउटपुट नीचे के रूप में है

Content-type: text/html

before alwaysiam inside dispath alwaysafter always

अब इसे 'प्रेषण' कहते हैं, लेकिन 'प्रेषण' नहीं

कोई भी उत्तर मेरी मदद नहीं करता है। यह निर्धारित कार्यों को कभी नहीं करता है। Ie जब क्रोन पहली बार चलता है तो यह सफलतापूर्वक तालिका में कार्यों का निर्माण करता है। लेकिन यह कभी भी कार्य को अंजाम नहीं देता है।


जब आप एक वेब ब्राउज़र से cron.php चलाते हैं तो क्या होता है? यह एक कोरा पृष्ठ होगा, लेकिन मेरा मतलब है कि आपके क्रोन कार्यों का क्या होगा?
seanbreeden

बैश स्क्रिप्ट का उपयोग करने का प्रयास करें: */5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.shयदि उपलब्ध हो।
फिल बिरनी

@seanbreeden, जब मैं ब्राउज़र पर URL के माध्यम से चलता हूं तो यह एक खाली पृष्ठ दिखाता है। कार्यों के लिए कुछ भी नहीं हुआ है .. मैंने इस सवाल को नए कार्यों के नए सेट के साथ अद्यतन किया है ...
मैलासेवन

@PhilB, .sh को कोई फर्क नहीं पड़ता। यह समान है कि लंबित कार्य हमेशा के लिए लंबित हैं लेकिन मुझे यकीन है कि क्रोन हर 5 मिनट में चल रहा है।
मलयसेल्वन

क्या आपने cron_scheduleटेबल खाली करने की कोशिश की ? अगर यह लगभग एक घंटे के बाद नए कार्य के साथ भर के मिल की जाँच करें
Sander Mangel

जवाबों:


3

यह क्रोन जॉब्स का PHP संस्करण था।

PHP संस्करण उस साइट के लिए सही ढंग से सेट किया गया था, जिसके कारण वह काम कर रहा था; हालाँकि Cron Jobs सर्वर देशी PHP 5.3 पर चल रहा था, यही कारण है कि मुझे Cron चलाते समय केवल त्रुटियाँ मिल रही थीं। मैंने संस्करण ५.५ में अपडेट किया।

परिवर्तित क्रोन कमांड:

php /home/mydomainname/public_html/cron.php
to
php55 /home/mydomainname/public_html/cron.php

या होस्टगेटर में:

/opt/php55/bin/php /home/mydomainname/public_html/cron.php

cron.php में

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

इस पंक्ति के बाद, जोड़ें:

$isShellDisabled = true;

एक विशिष्ट PHP संस्करण (मेरे मामले में ea-php70) में cron.php चलाने का उल्लेख उन मुद्दों को ठीक करता है जो मैं चला रहा था: php -vटर्मिनल को चलाने के लिए टर्मिनल का उपयोग कर रहे हैं यह देखने के लिए। मेरे मामले में यह 5.6 था। इसलिए मैं बदलकर पीएचपी 7.0 के उपयोग के लिए मजबूर करने के लिए किया था phpके लिए ea-php70में crontab -e। धन्यवाद!
डैन वैन डेन बर्ग

2

क्या आपने cron_scheduleटेबल खाली करने की कोशिश की ? एक या दो घंटे के बाद नए कार्यों से भरा हुआ है या नहीं इसकी जाँच करें।

इसके अलावा आप विशिष्ट क्रोनोजर को निष्क्रिय करने के लिए Aoe_Scheduler का उपयोग कर सकते हैं । देखें कि क्या कोई विशेष किसी त्रुटि का कारण बन सकता है जो अन्य सभी कार्यों को रोक देता है।

मैगेंटो क्रोनॉजर को स्क्रिप्ट में एक घातक त्रुटि के रूप में सेट किया गया है जिससे सभी कार्यों का निष्पादन विफल हो जाएगा


जवाब के लिए धन्यवाद। क्या किसी भी लॉग में घातक त्रुटि कैप्चर की गई है? मैंने अपने मामले में कुछ और निष्कर्षों को अद्यतन किया और अपने प्रश्न में भी इसे अद्यतन किया।
मलयेश्वन

@ सीनियनडेन: आज मैंने देखा कि जब मैं वेब ब्राउजर के माध्यम से क्रोन.फ्प लॉन्च करता हूं तो यह शेड्यूल उठाकर बहुत अच्छा काम करता है। यह साबित करता है कि किसी भी स्क्रिप्ट में कोई घातक त्रुटि नहीं है। किसी भी विचार क्यों क्रोन crontab के माध्यम से नहीं चल रहा है?
मालासेल्वन

2

पहले कदम के रूप में, मैं आपकी सेटिंग्स को वापस Magento की डिफ़ॉल्ट क्रोन सेटिंग्स में बदलने का सुझाव दूंगा:

Magento Cron Defaults

आपकी वर्तमान सेटिंग्स के साथ एक समस्या है: आपका शेड्यूल हर 15 मिनट में जनरेट होता है, लेकिन केवल 5 मिनट के लिए ही शेड्यूल किया जाता है, जो 10 मिनट का अंतर छोड़ता है।


धन्यवाद। डिफ़ॉल्ट रूप से रीसेट करने के बाद भी यह काम नहीं करता है। जब पहली बार यह चलता है तो यह निर्धारित समय के साथ cron_schedule तालिका में सभी नौकरियों का निर्माण करता है। नौकरियों को कभी भी चुना नहीं जाता है और तालिका में हमेशा के लिए लंबित रहता है। एक चीज $isShellDisabled = true;जिसे मैंने सेट करने के बाद देखा और जब मैंने Cron.php को ब्राउज़र के माध्यम से लॉन्च किया तो नौकरियों को चुना गया, लेकिन CronTab के माध्यम से नहीं।
मलयसेल्वन

यह समस्या अभी तक हल नहीं हुई है। क्या मेरे होस्टिंग प्रदाता के साथ कोई समस्या होगी। मैं देख रहा हूं कि स्क्रिप्ट नियमित अंतराल पर चालू होती है लेकिन केवल नौकरियां नहीं चुनी जाती हैं। यह भी एक समस्या है क्योंकि मैं 1.8 से चले गए?
मलयसेल्वन

क्या आपके क्रोनजॉब में पर्याप्त मेमोरी है? यह देखने के लिए कि क्या वहाँ कुछ भी मदद कर सकता है त्रुटि लॉग की कोशिश करें।
को फोमन

यह समस्या अभी तक हल नहीं हुई है ... हर दिन मैं अपना सिर तोड़ रहा हूं। त्रुटि लॉग? मैं कहाँ देख सकता हूँ?
मलायसेल्वन

त्रुटि लॉग के लिए @Miselvan अपने सिस्टम व्यवस्थापक या वेबहोस्ट के साथ जाँच करें क्योंकि उन्हें स्थान पता होना चाहिए और सर्वर के त्रुटि लॉग का उपयोग कैसे करें। इसके अलावा यह कमांड लाइन से क्रोन जॉब को मैन्युअल रूप से चलाने में मदद कर सकता है - दोनों की कोशिश करें php -f cron.phpऔर ./cron.shयह देखने के लिए कि क्या वे आगे की जांच के लिए कुछ भी पैदा करते हैं।
पर फोमन में क्रिस्टोफ़

1

मेरे लिए भी यही समस्या है।

"बहुत देर हो गई ..." त्रुटि मिली।

सफाई की cron_scheduleमेज के बाद , cron.sh ने काम करना बंद कर दिया (अब और समय नहीं)।

सभी पुरानी क्रोन प्रक्रियाओं को मारने के बाद ही काम किया गया।


मेरे मामले में जब क्रोन पहली बार चलता है तो इसने सफलतापूर्वक तालिका में कार्यों का निर्माण किया। लेकिन यह कभी भी कार्य को अंजाम नहीं देता है। :-(
मलयसेल्वन

1

मुझे भी यही समस्या थी। मेरे मुद्दा था समय क्षेत्र विशेष: created_atऔर scheduled_atस्तंभों में cron_scheduleतालिका UTC + 0 होना चाहिए, मेरी प्रविष्टियों UTC + 2 थे।

इसे सत्यापित करने के लिए आप बस तारीखों को कल से created_atऔर scheduled_atकल तक सेट कर सकते हैं और अगले क्रोन शेड्यूल तक प्रतीक्षा कर सकते हैं ।

आशा है कि किसी की मदद करता है!


1

Bluehost पर, cron.sh बदलाव में

 PHP_BIN=`which php`

सेवा

 PHP_BIN="php54s"

साझा होस्टिंग में डिफ़ॉल्ट रूप से यह PHP 5.2 चलाता है।

मुझे भी बदलना पड़ा cron.php, दो $isShellDisabledपंक्तियों की जगह$isShellDisabled = true;

PHP की चेतावनी से छुटकारा पाने के लिए, मैंने पहले भी इन पंक्तियों को जोड़ा था

$_SERVER['SCRIPT_NAME'] = 

if (empty($_SERVER['SCRIPT_FILENAME'])) $_SERVER['SCRIPT_FILENAME'] = '~/public_html/cron.php';
if (empty($_SERVER['SCRIPT_NAME'])) $_SERVER['SCRIPT_NAME'] = '/cron.php';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.