किस क्रोन लिपि को चलाना सबसे अच्छा है? cron.php या cron.sh


27

Magento अपनी जड़ निर्देशिका में दो क्रोन स्क्रिप्ट प्रदान करता है, cron.php और cron.sh.

कौन सा चलाना बेहतर है और क्यों?

जवाबों:


31

Cron.sh को चलाना सबसे अच्छा होगा

Magento EE 1.13.x और CE 1.8.x के रूप में, क्रोन यांत्रिकी बदल गया है जहाँ Magento ने एक नया शेड्यूलिंग मोड फ़ंक्शन पेश किया है।

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

मूल रूप से cron.php बिना किसी पैरामीटर के बुलाया जा रहा है, cron.sh की दो प्रक्रियाओं को निष्पादित करने के लिए shell_exec का उपयोग करता है। प्रत्येक एक अलग पैरामीटर ("डिफ़ॉल्ट" या "हमेशा") के साथ। Cron.sh बदले में इस पैरामीटर को cron.php पर वापस भेज देता है जो तब क्रोन को निष्पादित करता है। आंतरिक रूप से मैगेंटो अपने इवेंट इंफ्रास्ट्रक्चर का उपयोग "डिफ़ॉल्ट" और "हमेशा" नामों के साथ घटनाओं को भेजकर दो तरीकों को संसाधित करने के लिए करता है। Mage_Cron फिर दो पर्यवेक्षक विधियों को लागू करता है।

Cron.php को देखते हुए, आप PHP फ़ंक्शन shell_exec के उपयोग को नोटिस करेंगे। सुरक्षा चिंता का विषय होने के अलावा, फ़ंक्शन कोई त्रुटि उत्पन्न होने पर प्रोग्राम को वापस कर सकता है या प्रोग्राम कोई आउटपुट नहीं देता है। इस फ़ंक्शन का उपयोग करके निष्पादन विफलताओं का पता लगाना संभव नहीं है। इसका मतलब यह है कि किसी भी बिंदु पर जब आपकी स्क्रिप्ट / कोड किसी त्रुटि के कारण विफल हो जाता है, तो निम्न होता है: 1. क्रॉन्जॉब बासी हो जाता है, 2. कोई त्रुटि दर्ज नहीं की जाती है, 3. और किसी को नहीं पता कि इसमें से कोई भी हुआ है।

इसे दूर करने के लिए, निम्नलिखित क्रोनजॉब को जोड़ा जाना चाहिए:

*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default
*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=always

यह सुनिश्चित करेगा कि प्रक्रिया मोड हमेशा फॉलबैक PHP फ़ंक्शन शेल_एक्सएक्यू का उपयोग किए बिना चलेगा और यह कि क्रोन को बासी नहीं बनना चाहिए क्योंकि एक त्रुटि होने पर अपवाद को फेंक दिया जाता है।


बस जोड़ने के लिए जा रहा है कि ऊपर नमूना cron अभिव्यक्ति बहुत सामान्य है। www-dataजो भी उपयोगकर्ता वेब सर्वर प्रक्रियाओं को चलाता है वह बदल जाएगा। यह भी ध्यान देने योग्य है कि कई CPanel / WHM होस्टिंग सेटअप के लिए, shell_exec()अक्षम होने जा रहा है।
pspahn

*/5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default */5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=alwaysऔर इन आदेशों दे त्रुटि नूपुर वालिया द्वारा "कमांड नहीं मिला"
अमित बेरा

यदि आपको वह त्रुटि मिलती है, तो आपको 3 चीजों की जांच करने की आवश्यकता है: 1) www-डेटा उस सर्वर पर सही उपयोगकर्ता है जो इस प्रक्रिया को चला सकता है, और इसे जो कुछ भी उपयोगकर्ता है उसे बदल दें। 2) श के स्थान की जाँच करें, इसलिए "जो श" को चलाएं और इसे स्थान को आउटपुट करना चाहिए, यह "/ बिन / श" को प्रतिस्थापित करेगा यदि इसका एक अलग मार्ग है। 3) अंत में जाँच करें कि cron.sh के लिए पथ वास्तव में सही है।
शौघन

@AmitBera मुझे वही त्रुटि संदेश मिल रहा था और वह www-data, root या किसी अन्य उपयोगकर्ता के साथ काम नहीं कर सका। मैं वास्तव में सिर्फ उपयोगकर्ता को छोड़ दिया था और अब यह काम करता है, इसलिए*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
माइकल

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