Scheduler
मान लीजिए आप कपड़ों की एक ऑनलाइन दुकान चलाते हैं। जब कोई ग्राहक आख़िरी बची इकाई ख़रीद ले जाता है, तो उस उत्पाद का स्टॉक 0 हो जाता है। दोबारा बेचने के लिए आपूर्तिकर्ता को ऑर्डर देना पड़ता है। मान लीजिए आपूर्तिकर्ता के पास ऑर्डर लेने वाली एक खिड़की इंटरनेट पर खुली हुई है, और किसी तय पते पर बुलाने से ऑर्डर दर्ज हो जाता है। मान लीजिए, 0 स्टॉक वाले उत्पादों को ढूँढकर उस खिड़की को बुलाने का काम आपने Script के रूप में बना रखा है। फिर भी एक समस्या बची रहती है। हर दिन एक बार उस Script को दबाने के लिए किसी व्यक्ति की ज़रूरत होती है।
Scheduler उस व्यक्ति की जगह ले लेता है। “इस Script को हर दिन एक ही समय पर चलाओ” यह एक बार तय कर देने पर, हर बार वह समय आते ही WEEGLOO ख़ुद-ब-ख़ुद उसे चला देता है। किसी को भी स्क्रीन खोलने की ज़रूरत नहीं रहती।
इसकी तुलना अलार्म घड़ी सेट कर रखने से की जा सकती है। कितने बजे बजना है यह एक बार तय कर देने पर, उसके बाद हर दिन उसी समय पर वह अपने-आप बज उठती है। इस पृष्ठ पर हम कपड़ों की दुकान के “स्टॉक ऑर्डर” उदाहरण के ज़रिए देखेंगे कि Scheduler में क्या तय किया जाता है, समय को कैसे लिखा जाता है, और वह किसकी अनुमति से चलता है।
तय करने की तीन बातें
एक Scheduler में तय करने की चीज़ें ज़्यादा नहीं हैं।
- नाम: बाद में सूची में पहचानने के लिए। जैसे:
स्टॉक ऑर्डर। - चलाई जाने वाली Script: उस समय आने पर चलाई जाने वाली एक Script चुनी जाती है। एक Scheduler केवल एक ही Script चलाता है।
- कब चलेगा: नीचे कब चलेगा यह लिखने का तरीका में बताया गया है।
इसके अलावा यहाँ एक चालू/बंद करने वाला स्विच भी होता है। बंद कर देने पर सहेजा हुआ ज्यों-का-त्यों बना रहता है, बस चलना नहीं होता। जब आपूर्तिकर्ता की छुट्टी की अवधि जैसी किसी वजह से कुछ समय के लिए रोकना हो, तब इसे मिटाने की ज़रूरत नहीं रहती।
चलाई जाने वाली Script को बाद में नहीं बदला जा सकता। कोई दूसरी Script चलानी हो तो Scheduler नया बनाया जाता है। नाम, समय, और चालू/बंद करना कभी भी बदला जा सकता है।
कब चलेगा यह लिखने का तरीका
समय पाँच खानों में लिखा जाता है। बाएँ से मिनट, घंटा, दिन, माह, सप्ताह का दिन होते हैं, और * का मतलब है “सब कुछ”।
मिनट घंटा दिन माह सप्ताह का दिन
0 9 * * * → हर दिन ठीक 9 बजेअक्सर इस्तेमाल होने वाले रूप ये हैं।
| लिखा जाने वाला मान | कब चलता है |
|---|---|
0 0 * * * | हर दिन ठीक 0 बजे |
30 9 * * * | हर दिन 9 बजकर 30 मिनट पर |
0 * * * * | हर घंटे पूरे घंटे पर |
*/10 * * * * | हर 10 मिनट पर |
0 0 * * 1 | हर सोमवार ठीक 0 बजे |
0 0 1 * * | हर महीने की 1 तारीख़ को ठीक 0 बजे |
समय मानक समय (UTC) में पढ़ा जाता है। यह स्थानीय समय नहीं है, इसलिए पहले तय करें कि स्थानीय समय के हिसाब से कितने बजे चलाना है,
फिर उतने अंतर का हिसाब लगाकर लिखें। जो इलाक़ा मानक समय से 9 घंटे आगे है, वहाँ की सुबह के 9 बजे का मतलब 0 0 * * * होता है। स्टॉक
ऑर्डर इसी मान पर, यानी मानक समय के हिसाब से 0 बजे चलता है।
जिस समय में तारीख़ या वार शामिल हो, उसमें यह हिसाब तारीख़ तक को खिसका सकता है, इसलिए एक बार और जाँच लें।
जो मान कभी नहीं चलता, वह सहेजा नहीं जाता। उदाहरण के लिए 0 0 30 2 * 30 फ़रवरी को इंगित करता है, पर ऐसा दिन कभी आता ही
नहीं, इसलिए सहेजने की कोशिश करने पर मान दोबारा जाँचने को कहता हुआ जवाब मिलता है।
किसकी अनुमति से चलता है
जब Scheduler किसी Script को चलाता है, तो वह निष्पादन ऐसे माना जाता है मानो उसे उस Scheduler को बनाने वाले व्यक्ति ने किया हो। स्टॉक ऑर्डर Script का उत्पादों को पढ़ना और आपूर्तिकर्ता को बुलाना भी बनाने वाले की हैसियत से ही होता है।
इसलिए बनाने या बदलने के लिए दो अनुमतियाँ एक साथ चाहिए होती हैं।
- भूमिका (SpaceRole) में Scheduler सेट करने की अनुमति होनी चाहिए।
- उस Scheduler द्वारा चलाई जाने वाली Script को चलाने की अनुमति होनी चाहिए।
दूसरी अनुमति केवल बनाते समय ही नहीं, बदलते समय भी जाँची जाती है। ऐसा इसलिए, क्योंकि चलने का समय बदलना यानी उस Script को कब चलाना है यह तय करना है, और बंद पड़ी चीज़ को चालू करना यानी निष्पादन शुरू करना है।
अगर बनाने वाला बाद में वह अनुमति खो दे, तो Scheduler बंद हो जाता है। अगर ज़िम्मेदार व्यक्ति टीम से हट जाए या उसकी भूमिका सीमित हो जाए, तो अगले निष्पादन समय पर WEEGLOO इसे जाँच लेता है और बिना चलाए ही स्विच बंद कर देता है। अनुमति वापस मिल जाने पर भी स्विच अपने-आप चालू नहीं होता, इसलिए इसे ख़ुद फिर से चालू करना पड़ता है।
निष्पादन रिकॉर्ड देखना
Scheduler जब भी चलता है, हर बार एक रिकॉर्ड दर्ज होता है। वह बार सफल हुई या नाकाम, यह इसी में दर्ज रहता है। कल रात का ऑर्डर सचमुच गया या नहीं, यह इसी रिकॉर्ड से जाँचा जाता है।
सूची में हर बार का निष्पादन समय और परिणाम दिखता है। चलते-चलते नाकाम हुई बार को दबाने पर, उसकी वजह विवरण के त्रुटि हिस्से में ज्यों-की-त्यों दिख जाती है। यह लगे हुए समय के साथ दिखती है, इसलिए इस लिखावट से यह छाना जा सकता है कि नाकामी आपूर्तिकर्ता की खिड़की के जवाब न देने से हुई या किसी और समस्या से।
सफल निष्पादन का रिकॉर्ड 1 घंटे बाद और नाकाम निष्पादन का रिकॉर्ड 3 दिन बाद मिट जाता है। नाकाम वाला ज़्यादा समय तक रहता है, क्योंकि बाद में देखा जाने वाला रिकॉर्ड वही होता है। ऑर्डर के ब्यौरे की तरह जिन मानों को इससे भी ज़्यादा समय तक रखना हो, उन्हें Script के अंदर Content के रूप में सहेजें।
नाकाम होने पर भी Scheduler रुकता नहीं है। अगर आपूर्तिकर्ता की खिड़की थोड़ी देर के लिए जवाब न दे और इस वजह से नाकामी हो, तो केवल वही बार नाकाम के रूप में दर्ज होती है, और अगले समय पर यह फिर चल पड़ता है।
Webhook से क्या अलग है
दोनों में यह बात एक जैसी है कि इंसान के दबाए बिना भी ये Script चला देते हैं। जो बात अलग करती है वह है कि निष्पादन को क्या बुलाता है।
- Webhook जब कुछ घट जाए तब चलता है। जब कोई उत्पाद जुड़ जाए, जब कोई कंटेंट प्रकाशित हो जाए।
- Scheduler जब समय आ जाए तब चलता है। कुछ भी न घटे, तब भी हर दिन उसी समय पर।
स्टॉक ऑर्डर देखने में पहली नज़र में Webhook के लिए सही जान पड़ता है। क्योंकि स्टॉक जिस क्षण 0 होता है, उसी क्षण ऑर्डर दे देना है। पर अगर एक ही उत्पाद का स्टॉक एक ही दिन में 0 हो जाए, फिर वापसी (रिटर्न) से लौट आए, और दोबारा 0 हो जाए, तो हर बार एक ऑर्डर निकल जाता है। दिन में एक बार इकट्ठा करके देखें, तो एक उत्पाद पर ऑर्डर भी एक ही रहता है। जो काम “हर बार घटने पर” नहीं, बल्कि “इकट्ठा करके एक बार” होना चाहिए, वही Scheduler की जगह है।
इसके उलट, उत्पाद जुड़ने के क्षण ही विवरण भर देने का काम टालने की कोई वजह नहीं है, इसलिए वह Webhook है।
जानने योग्य बातें
- इनकी संख्या पर एक सीमा है। एक Organization कितने Scheduler रख सकता है, यह हर योजना (प्लान) के हिसाब से तय है (Free 1, Basic 5, Pro 30, Enterprise असीमित)। सीमा तक पहुँच जाने पर नया नहीं बनाया जा सकता, और इस्तेमाल में न आने वाले को मिटाने पर एक जगह फिर से खाली हो जाती है।
- निष्पादन की गिनती Script के साथ साझा होती है। Scheduler जो काम करता है वह Script चलाना ही है, इसलिए हर एक बार चलने पर योजना की Script निष्पादन-गिनती में से एक ख़र्च होती है। केवल Scheduler की अपनी कोई अलग सीमा नहीं है। वह गिनती पूरी ख़र्च हो जाने पर, उसके बाद जिन Scheduler का समय आता है वे चले बिना ही बंद हो जाते हैं। ऐसी स्थिति में शुरू क्यों नहीं हो सका, यह निष्पादन रिकॉर्ड में दर्ज रहता है। अगला महीना आ जाने पर भी ये अपने-आप चालू नहीं होते, इसलिए इन्हें ख़ुद फिर से चालू करना पड़ता है।
- छूटे हुए निष्पादन को बाद में भरा नहीं जाता। रखरखाव आदि की वजह से एक दिन छूट जाए, तो अगले दिन दो बार नहीं चलता। अगले समय से यह फिर चलता है।
- जिस Script को कोई Scheduler इस्तेमाल करता है, उसे मिटाया नहीं जा सकता। वह Scheduler बंद हो, तब भी यही लागू होता है। पहले उस Scheduler को मिटाएँ, फिर Script को मिटाएँ।
कंटेंट स्टूडियो में प्रबंधन
Scheduler को कंटेंट स्टूडियो की Scheduler स्क्रीन में बनाया और प्रबंधित किया जाता है। सूची में बनाए हुए Scheduler नाम, चलाने के लिए Script के नाम, cron एक्सप्रेशन, अगली बार, स्थिति, अपडेट किया गया और द्वारा अपडेट किया गया के साथ एक-एक पंक्ति में दिखते हैं।

स्क्रीन यह भी बता देती है कि दोनों खाने किस घड़ी के हिसाब से हैं। जिस खाने में cron एक्सप्रेशन होता है उसके शीर्ष पर UTC लगा रहता है, और अगली बार खाने के शीर्ष पर देखने वाले का समय क्षेत्र UTC±N की तरह लगा रहता है। इससे सहेजा हुआ मान और वह अपने समय के हिसाब से कितने बजे होता है, दोनों एक ही पंक्ति में दिख जाते हैं। मानक समय से पीछे रहने वाले समय क्षेत्रों में अगली बार पिछले दिन का दिख सकता है।
नया Scheduler सूची के दाईं ओर ऊपर मौजूद बनाएं बटन से बनाया जाता है।
- सूची के दाईं ओर ऊपर मौजूद बनाएं बटन दबाएँ।
- नाम खाने में
स्टॉक ऑर्डरलिखें। - सक्रिय को चालू रखें। बंद रखने पर सहेजा तो जाता है, पर चलता नहीं है।
- चलाने के लिए Script में स्टॉक ऑर्डर Script चुनें।
- चलने का चक्र में स्वयं लिखें चुनें।
- पाँच खानों में
0 0 * * *लिखें। - दाईं ओर ऊपर मौजूद बनाएं बटन दबाकर सहेज लें।
स्क्रीन यह भी तुरंत दिखा देती है कि लिखा गया cron असल में कब चलेगा। ख़ुद लिखे गए cron के मानक समय (UTC) में सहेजे जाने की सूचना के साथ, सहेजे जाने वाला cron मान और अगली बार के समय की झलक भी साथ दिखती है।

सूची में से किसी एक Scheduler को दबाने पर उस Scheduler की विवरण स्क्रीन खुल जाती है। विवरण स्क्रीन निष्पादन लॉग और सेटिंग, इन दो टैब में बँटी होती है, और पहली बार खोलने पर निष्पादन लॉग दिखता है। निष्पादन लॉग टैब में अब तक चली हर बार एक-एक पंक्ति में आती है, और हर पंक्ति में निष्पादन समय·परिणाम·उस बार को इंगित करने वाली अनुरोध ID दिखती है। परिणाम खाने से केवल सफल बार या केवल नाकाम बार छानकर देखी जा सकती हैं, और लॉग रीफ़्रेश करें दबाने पर अभी-अभी चली बार तक दोबारा पढ़ ली जाती है।

किसी एक बार को दबाने पर उसी बार का विवरण खुल जाता है। यहाँ परिणाम के साथ स्थिति कोड, लगा हुआ समय (अवधि), और वह बार किसकी पहचान से चली (Run as) दिखते हैं, और नाकाम हुई बार हो तो उसकी वजह त्रुटि हिस्से में ज्यों-की-त्यों दिखती है। ऊपर की ओर ऐसे बैज होते हैं जो बताते हैं कि यह बार किस Scheduler की है और उसने कौन-सी Script चलाई, और उनके साथ उस Script तक जाने वाला लिंक तथा उसी बार को Script वाले रिकॉर्ड में देखने का Script लॉग में देखें लिंक भी होता है।

आगे क्या करें
- Script: Scheduler जिस Script को चलाता है उसे बनाने का तरीका, और आपूर्तिकर्ता की खिड़की जैसी बाहरी सेवा को बुलाने वाली क्रिया रखने का तरीका बताता है।
- Webhook: तय किए गए समय पर नहीं, बल्कि तय किए गए बदलाव होने पर चलाने का तरीका बताता है।
- भूमिका और अनुमतियाँ: Scheduler सेट करने की अनुमति और Script चलाने की अनुमति को भूमिका में डालने का तरीका बताता है।
