2012-04-19 11 views
5

मुझे एक सेट समय पर एक बार चलाने के लिए क्रॉन नौकरी स्थापित करने में मुश्किल हो रही है। यहाँ मैं अपने मॉड्यूल के config में है:Magento का क्रॉन मूल रूप से त्रुटिपूर्ण है?

<crontab> 
    <jobs> 
     <sorting_flushcache> 
      <schedule><cron_expr>0 16 * * *</cron_expr></schedule> 
      <run><model>sorting/observer::flushProductCacheCron</model></run> 
     </sorting_flushcache> 
    </jobs> 
</crontab> 

से मैं क्या क्रॉन नौकरियों के बारे में पता है, कि अपने स्थानीय समय क्षेत्र पर आधारित शाम 5pm बजे चलाने चाहिए। हालांकि, यह कभी काम नहीं करता है। यदि मैं इसके बजाय cron_expr से * 16 * * * पर सेट करता हूं तो यह पूरे घंटे (जैसा कि आप उम्मीद करेंगे) के लिए हर मिनट नौकरी निर्धारित करता है।

मैं कोड के माध्यम से पता लगाया और मुझे लगता है मैं समस्या पाया लगता है, लेकिन मैं क्रॉन निर्धारण के बारे में पर्याप्त जानकारी नहीं है और यह कैसे वास्तव में काम करने के लिए तो मैं आशा करती हूं कि किसी की मदद कर सकते हैं मुझे समझने क्या गलत है और कैसे अपेक्षा की जाती है अपना काम काम करने के लिए।

Mage_Cron_Model_Schedule जानवर का दिमाग है। जब cron.php स्क्रिप्ट को सर्वर के क्रोंटैब शेड्यूल द्वारा बुलाया जाता है तो यह एक ऐसा ईवेंट भेजता है जो इस वर्ग को पकड़ता है और उसका काम करता है। अन्य चीजों के अलावा यह कॉन्फ़िगरेशन और आगामी क्रॉन नौकरियों को निर्धारित करने के प्रयासों में खींचता है। public function trySchedule($time) के अंदर यह matchCronExpression पर कॉल करता है, जो इसे क्रॉन अभिव्यक्ति के उस टुकड़े से संबंधित वर्तमान समय के मूल्य के साथ प्रश्न में क्रॉन अभिव्यक्ति का टुकड़ा पास करता है। उदाहरण के लिए, यह वर्तमान टाइमस्टैम्प के मिनटों में cron_expr (मिनट भाग) के पहले भाग की तुलना करता है। matchCronExpression समारोह के अंत में यह तो जैसे एक बूलियन मान देता है:

return ($num>=$from) && ($num<=$to) && ($num%$mod===0); 

मेरे मामले में, मेरा cron_expr0 16 * * * है। चूंकि मेरे पास मिनट भाग के लिए कोई श्रेणी या */5 टाइप सामग्री नहीं है, इसलिए यह वर्तमान टाइमस्टैम्प के सटीक मूल्य के विरुद्ध निर्धारित सटीक मान की तुलना कर रहा है। इसका मतलब यह है कि यह केवल तभी सही होगा जब क्रॉन स्क्रिप्ट को सटीक मिनट में चलाने के लिए यह हुआ कि यह नौकरी निर्धारित की जानी चाहिए।

फिर से, मैं एक क्रॉन विशेषज्ञ नहीं हूं लेकिन यह मेरे लिए सही नहीं लगता है। तो, क्या एक दिन में एक बार चलाने के लिए नौकरी निर्धारित करना है, यदि आप सही समय की भविष्यवाणी नहीं कर सकते कि क्रॉन शेड्यूलर स्क्रिप्ट चलाएगा? मुझे उम्मीद है कि मुझे कुछ याद आ रहा है ... क्या कोई मदद कर सकता है?

- क्रॉन कॉन्फ़िग जानकारी -

generate schedules every: 5 
schedule ahead for: 10 
missed if not run within: 20 
success history lifetime: 60 
failure history lifetime: 600 
+0

सर्वर टाइमज़ोन, आपका स्थानीय टाइमज़ोन नहीं। – hakre

+0

जो भी हो, वह बात नहीं है। जैसा कि मैंने अपनी पोस्ट में उल्लेख किया है, अगर मैं इसे '* 16 * * *' में बदलता हूं तो यह काम करता है .... तो यह अर्थशास्त्र नहीं है कि मैंने किस समय कहा था कि मैंने इसे आधारित किया है। मैं बस काम नहीं करता। – BrianVPS

+0

हाँ टूटा हुआ दिखता है। लेकिन मैंने जो पढ़ा, मैग्नेटो की कोड गुणवत्ता अच्छी नहीं है। शायद रिलीज को धक्का देने के लिए एक साथ झटकेदार कुछ और इसे जल्दी बेचा जाने के लिए सेक्सी लग रहा है। – hakre

उत्तर

3

मैं इस मुद्दे के लिए एक "समाधान" पाया है सकते हैं, लेकिन मुझे यकीन है कि इसके संभावित प्रभावों को इस हो सकता है नहीं कर रहा हूँ। उम्मीद है कि कोई और बेहतर जवाब देने या प्रदान करने के लिए झुक सकता है।

generate schedules every: 1 
schedule ahead for: 5 
missed if not run within: 20 
history cleanup every: 30 
success history lifetime: 60 
failure history lifetime: 600 

यह चाल किया है लगता है:

मैं इस प्रकार Magento में मेरी क्रॉन कॉन्फ़िग बदल दिया है। यह अब हर मिनट शेड्यूल उत्पन्न करता है, इसलिए यह मेरी एक दिवसीय घटना को शेड्यूल करने के लिए विंडो को याद नहीं करता है।

इस पर कोई विचार? मुझे चिंता है कि सिस्टम हर मिनट क्रॉन शेड्यूल उत्पन्न करने के लिए बहुत अधिक है। इसे संभालने में सक्षम होना चाहिए, लेकिन मुझे पुष्टि करने के लिए परीक्षण करना होगा।

किसी और का एक समान अनुभव है? आपने इसे कैसे ठीक किया?

+0

ठीक है, इसने cron_schedule तालिका में दिखने के लिए प्रविष्टियां प्राप्त की हैं लेकिन यह मेरे कोड को ठीक से नहीं चल रहा है। क्रॉन द्वारा बुलाए गए मेरे मॉडल में विधि ** flushProductCacheCron ** है। इसे चलाने के बाद मैं डीबी की जांच करता हूं और यह मेरी तालिका को अद्यतन करता है ताकि यह दर्शाया जा सके कि उसने उन वस्तुओं को संसाधित किया है जिन्हें प्रोसेसिंग की आवश्यकता है लेकिन यह वास्तव में कैश को कभी नहीं फिसल गया। क्या क्रॉन नौकरी द्वारा कोड को चलाने के लिए सीमाएं हैं? परीक्षण करने के लिए मैंने क्रोन द्वारा बुलाए गए एक ही विधि को कॉल करने के लिए एक फ्रंटएंड नियंत्रक स्थापित किया। जब मैं उस यूआरएल को लोड करता हूं तो यह सही तरीके से काम करता है। केवल क्रॉन में समस्या है। यहाँ क्या चल रहा है? – BrianVPS

संबंधित मुद्दे