2012-05-10 46 views
5

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

2 मुख्य समस्याओं में है कि मैं के लिए अपने सुझाव चाहते हैं:

समस्या 1:

    : आवेदन ही

    की स्थापना मैं क्रॉन जॉब को चलाने के लिए 2 तरीके हैं

  1. पहला तरीका scripts फ़ोल्डर बनाना है और इसमें एक सामान्य बूटस्ट्रैप फ़ाइल बनाना है जहां मैं केवल संसाधनों को लोड करूंगा जो मुझे चाहिए। फिर प्रत्येक कार्य के लिए मैं एक अलग स्क्रिप्ट तैयार करूंगा और प्रत्येक स्क्रिप्ट में मैं बूटस्ट्रैप फ़ाइल शामिल करूंगा। अंत में, मैं इन स्क्रिप्ट्स में से प्रत्येक के लिए क्रॉन्टाब फ़ाइल में एक क्रॉन कार्य जोड़ूंगा और यह कार्य ***** php /path/to/scripts/folder/cronScript_1.php जैसा होगा।

  2. दूसरा सामान्य अनुरोध जैसे क्रॉन नौकरी का इलाज करें (कोई विशेष बूटस्ट्रैप नहीं)। इन स्क्रिप्ट्स में से प्रत्येक के लिए crontab फ़ाइल में एक क्रॉन कार्य जोड़ें और कार्य ***** curl http://www.mydomain.com/module/controller/action जैसा कुछ होगा।

समस्या 2: इंटरफ़ेस आवेदन

एक क्रॉन जॉब भी 2 तरीकों से किया जा सकता है जोड़ा जा रहा है करने के लिए:

  1. प्रत्येक कार्य के लिए वहाँ में एक प्रविष्टि होगी crontab फ़ाइल। जब मैं एक नया कार्य जोड़ना चाहता हूं तो मुझे इसे क्रैनबैब को संपादित करने के लिए सीपीनल या किसी अन्य माध्यम के माध्यम से करना होगा (जो उपलब्ध नहीं हो सकता है)।

  2. डेटाबेस में कार्यों को संग्रहीत करें और डेटाबेस के साथ बातचीत करने के लिए यूआई प्रदान करें (कुछ कार्य और कॉन्फ़िगरेशन जोड़ने के लिए ग्रिड)। इसके बाद क्रॉन्टाब फ़ाइल में केवल 1 क्रॉन जॉब लिखें जो हर मिनट चलती है। यह नौकरी डेटाबेस से सभी नौकरियों का चयन करेगी और जांच करेगी कि कोई नौकरी है जो अब चलाना चाहिए (कार्यों के लिए समय संग्रहीत किया जाएगा और सर्वर के वर्तमान समय की तुलना में)।


आपकी राय जो रास्ता प्रत्येक भाग के लिए लागू करने के लिए बेहतर है? क्या इसके लिए एक तैयार समाधान है जो सामान्य रूप से बेहतर है ??

नोट

मैं एक तैयार समाधान के लिए खोज Quartz इच्छा बारे में जाना। क्या यह मैं देख रहा हूं या यह कुछ अलग है?

धन्यवाद।

+0

क्वार्ट्ज जावा के लिए है इसलिए मुझे नहीं लगता कि ज़ेंड-फ्रेमवर्क के साथ एकीकृत करने के लिए यह एक आसान काम होगा। – Zombaya

उत्तर

4

बस मेरी राय है, लेकिन मुझे व्यक्तिगत रूप से दोनों2 पसंद है जो आपकी स्क्रिप्ट को पूरा करने का इरादा रखती है। उदाहरण के लिए, हम ज्यादातर हमारी क्रॉन प्रविष्टियों के साथ 1 करते हैं क्योंकि यह/etc/crontab को देखने में वास्तव में आसान हो जाता है और चीजों को चलाने के दौरान एक नज़र में देखा जाता है। हालांकि, ऐसे समय होते हैं जब एक स्क्रिप्ट को हर मिनट बुलाया जाना चाहिए क्योंकि स्क्रिप्ट के भीतर तर्क तब पता लगाएगा कि उस सटीक मिनट में क्या चलना है। (अर्थात।लाखों उपयोगकर्ताओं को लगातार संसाधित करने की आवश्यकता है ताकि आपके पास घंटे के प्रत्येक मिनट में उपयोगकर्ता क्या कर सकें)

गियरमैन (http://gearman.org/) पर भी एक नज़र डालें। यह आपको एक मशीन पर चलने वाली क्रॉन स्क्रिप्ट्स को सक्षम बनाता है जो फिर नौकरियों को छोटे बिट्स में फिसलता है और प्रोसेसिंग के लिए अन्य सर्वरों पर उन बिट्स को खेत देता है। आप पर पूरा नियंत्रण है कि आप कितना दूर नक्शा लेना चाहते हैं/इसके पहलू को कम करना चाहते हैं। इससे हमें बहुत मदद मिली है और हमें प्रति मिनट हजारों एल्गोरिदम स्क्रिप्ट को संसाधित करने की अनुमति मिलती है। अगर हमें अधिक शक्ति की आवश्यकता है तो हम केवल "वर्कहोर" नोड्स को स्पिन करें और गियरमैन स्वचालित रूप से उनका पता लगाएगा और उनका उपयोग करेगा।

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

+1

+1 विस्तृत उत्तर के लिए धन्यवाद :) निश्चित रूप से गियरमैन में देखेंगे! मेरे पास एक सवाल है, हालांकि, अगर मैं एक साझा होस्टिंग पर एक परियोजना कर रहा हूं, जहां मुझे सर्वर की जरूरतों को पूरा करने की स्वतंत्रता नहीं होगी? क्या गियरमैन एक अच्छा समाधान होगा या मुझे अपने आवेदन के अंदर एक अनुकूलित प्रणाली बनाना होगा? – Songo

+0

@ सोंगो मैंने कभी भी अपने स्वयं के हार्डवेयर या रूट सर्वर के साथ समर्पित सर्वर पर लागू किया है। मुझे नहीं लगता कि आप इसे साझा वातावरण में तब तक उपयोग करने में सक्षम होंगे जब तक आपके पास रूट पहुंच न हो। –

0

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

रूट पर सर्वर पर लॉगिंग करने, क्रोंटैब को संपादित करने, पैटर्न को याद रखने और सहेजने से कहीं अधिक आसान है। इसके अलावा आपको "क्रॉन्टाब लड़का" के रूप में जाना नहीं जाएगा, जब भी वे क्रॉन्टाब में कुछ जोड़ना चाहते हैं, तब हर कोई आता है।

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

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