शरद ऋतु के समय के दौरान अनुसूचित नौकरियां बदल जाती हैं


12

मैं सोच रहा हूं कि अन्य लोग इस परिदृश्य से कैसे निपटेंगे।

क्या होगा अगर आपके पास 1:30 बजे चलने वाली नौकरी है। शरद ऋतु में, जब समय बदलता है, 1:00:00 बजे से 1:59:59 तक का समय खुद को दोहराता है और इसलिए यह नौकरी दो बार चलती है।

विंडोज टास्क शेड्यूलर, SQL एजेंट या कोई अन्य शेड्यूलिंग टूल हो सकता है। इनमें से अधिकांश उपकरण मशीन के समय पर आधारित प्रतीत होते हैं, UTC के समय पर नहीं। अगर मैंने इसे हर रात यूटीसी समय पर काम चलाने के लिए कहा, तो मेरे पास डुप्लिकेट घंटे की समस्या नहीं होगी।


1
मुझे कुछ भी अधिक करंट नहीं मिला, लेकिन उम्मीद है कि यह आपके लिए इस मुद्दे पर कुछ प्रकाश डालता है - support.microsoft.com/kb/325413
joeqwerty

यह उत्कृष्ट है, एक उत्तर में पोस्ट क्यों नहीं?
नीलवैल्ट्स

वैसे यह वास्तव में आपको एक समाधान नहीं देता है (कम से कम ऐसा नहीं है कि मैं इसे पढ़ने से इनकार कर सकता हूं) लेकिन मुझे लगा कि यह मुद्दे को समझने में मददगार होगा। मैं इसे एक टिप्पणी के रूप में छोड़ कर खुश हूं।
जोकेवेटी

जवाबों:


10

स्थानीय समय के हिसाब से भविष्य के कार्यों की उचित समय-सारणी, खाते के समय क्षेत्र और दिन के समय की बचत को ध्यान में रखते हुए, एक बहुत ही जटिल विषय है। मैं स्टैक ओवरफ़्लो पर एक प्रोग्रामिंग के नजरिए से पहले इसके बारे में लिखा है यहाँ और यहाँ

मैं गैर-प्रोग्रामिंग दृष्टिकोण से संक्षेप में बताऊंगा:

  • स्थानीय समयानुसार अपने पुनरावृत्ति पैटर्न को परिभाषित करें - UTC नहीं । उदाहरण के लिए, यदि आप प्रतिदिन सुबह 8:00 बजे उठने के लिए एक दैनिक अलार्म घड़ी सेट करते हैं, तो आप दिन के समय की बचत के बाद एक घंटे पहले या एक घंटे देर से उठना नहीं चाहते हैं। यदि मैं यूएस पैसिफिक टाइम ज़ोन में हूं, तो मैं 4:00 PM UTC के लिए शेड्यूल नहीं कर सकता, क्योंकि संक्रमण के बाद उसी स्थानीय समय 8:00 बजे को रखने के लिए इसे 3:00 PM UTC पर स्विच करना होगा।

  • उस समय क्षेत्र को परिभाषित करें जो "स्थानीय" समय दर्शाता है। यह मत समझो कि सर्वर का स्थानीय समय क्षेत्र एक ही समय क्षेत्र है जो अंतिम उपयोगकर्ता के लिए मायने रखता है।

  • प्रत्येक घटना के लिए एक UTC दिनांक और समय के स्थानीय समय को प्रोजेक्ट करें जो आप चाहते हैं कि ईवेंट आग लग जाए।

    • आप लगभग हमेशा अगली तत्काल घटना के लिए ऐसा करेंगे, जैसे कि आप यूटीसी घड़ी का उपयोग चलाने के लिए वास्तविक तत्काल समय निर्धारित करने के लिए कर सकते हैं।

    • में कुछ मामलों में, आप भी इस तरह के अगले 5 घटनाओं, या अगले साल के लिए सभी घटनाओं के रूप में अगले कई (या कई) उदाहरणों, परियोजना के लिए कर सकते हैं। (यह हिस्सा आवेदन की आवश्यकताओं के लिए अत्यधिक विशिष्ट है।)

  • दिन के उजाले की बचत के संक्रमण के समय घटित होने वाली घटनाओं के लिए क्या करना है (या तो निश्चित या विन्यास योग्य) में एक रणनीति रखें :

    • "स्प्रिंग फ़ॉरवर्ड" संक्रमण के लिए, स्थानीय समय के लापता होने का अंतराल होता है जब घटना मौजूद नहीं हो सकती है। उदाहरण के लिए, यूएस पैसिफ़िक समय में, एक दैनिक कार्य जो स्थानीय समयानुसार 2:00 बजे चलने वाला है, 9 मार्च, 2014 को मौजूद नहीं होगा। ज्यादातर मामलों में, आप उस समय को बचत राशि (आमतौर पर 1 घंटे) से आगे बढ़ाना चाहेंगे। ), इसलिए उस दिन यह अपराह्न 3:00 बजे चलेगा, लेकिन अगले समय 2:00 पूर्वाह्न पर वापस चलेगा। (हालांकि, यह पूरी तरह से संभव है कि आप इसके लिए एक अलग रणनीति चाहते हैं।)

    • "फ़ॉल बैक" संक्रमण के लिए, दोहराए गए स्थानीय समय का ओवरलैप होता है जब घटना दो बार मौजूद हो सकती है । उदाहरण के लिए, यूएस पैसिफिक टाइम में, 1:00 बजे चलने वाले एक दैनिक कार्य में दो संभावित समय होंगे जो 2 नवंबर 2014 को चल सकते हैं। ज्यादातर मामलों में, आप 1 की पहली घटना पर चलना चाहेंगे। : 00 AM पीडीटी और उसी तिथि के 1:00 पूर्वाह्न पीएसटी की अगली घटना को छोड़ दें। (लेकिन फिर से, आप कर सकते हैं एक अलग रणनीति इस तरह के दूसरे घटना पर चल रहा है, या दोनों में चल रहे के रूप में चाहते हैं। YMMV)

  • यदि आपको कभी भी अपना समय क्षेत्र डेटा अपडेट करने की आवश्यकता हो, तो अपने सभी होने वाले UTC समयों को पुनर्गणना करने के लिए तैयार रहें । IANA / ओल्सन TZDB हर साल कई अद्यतन डालता है क्योंकि उनके समय क्षेत्र ऑफसेट और डेलाइट बचत समय नियमों के बारे में दुनिया को बदलते हुए उनके दिमाग में हर समय की सरकारों। आप भविष्य में किसी भी विशिष्ट अवधि के लिए मान नहीं सकते हैं कि नियम नहीं बदलेंगे

    • समय क्षेत्र डेटा रिलीज़ की घोषणाओं के लिए सदस्यता सुनिश्चित करें , और उन्हें आपके सिस्टम और / या अनुप्रयोगों पर लागू करने के लिए एक प्रक्रिया हो।

    • एक पारंपरिक कॉर्पोरेट सेटिंग में, यह आईटी ऑपरेशंस स्टाफ की जिम्मेदारी होनी चाहिए।

    • आपके वातावरण के आधार पर, आपको यह डेटा tzdataलिनक्स पैकेज अपडेट, जावा JRE या tzupdater , या किसी अन्य चैनल के माध्यम से मिल सकता है । कभी-कभी यह पर्यावरण विशिष्ट होता है, और कभी-कभी यह प्रोग्रामिंग प्लेटफ़ॉर्म विशिष्ट होता है, जैसे कि PHP के लिए टाइमज़ोनबेड PECL पैकेज और कई अन्य।

    • Microsoft का अपना समय क्षेत्र डेटा है। Windows पर, यदि आप TimeZoneInfo.NET (उदाहरण के लिए) का उपयोग कर रहे हैं, तो आप इस डेटा का उपयोग कर रहे हैं। अपडेट यहां से आते हैं , और स्वचालित रूप से विंडोज अपडेट के माध्यम से भी बाहर धकेल दिए जाते हैं, इसलिए आपको उन लोगों पर नजर रखनी चाहिए, ताकि आपको पता चल जाए कि आपको कब / क्या पुनर्गणना करने की आवश्यकता है।

  • कि समझ में आ के सभी के साथ, वहाँ है अभी भी एक परिदृश्य में जहाँ आप यूटीसी द्वारा बस अनुसूची होता है, और उस के लिए है ABSOLUTE भविष्य की घटनाओं। उदाहरण:

    • एक ऐसा काम जो हर X घंटे या हर X मिनट चलता है।

    • सूर्योदय के समय और अन्य खगोलीय घटनाएँ शुरू होती हैं।

    • एक समय के प्रति संवेदनशील सुरक्षा खिड़की, जैसे कि किसी पूर्वाभासित समय में संवेदनशील जानकारी को किसी अन्य पार्टी में स्थानांतरित करना।


विंडोज टास्क शेड्यूलर

विंडोज जरूरी नहीं कि सही काम हो। ध्यान दें कि आप ट्रिगर को कैसे परिभाषित करते हैं:

विंडोज टास्क शेड्यूलर

जब आप "समय क्षेत्रों में सिंक्रनाइज़ करें" लेबल वाले बॉक्स की जांच करते हैं, तो कार्य केवल यूटीसी द्वारा निर्धारित किया जाता है। (सभी समय को अभी भी स्थानीय समय के रूप में दिखाया जाता है, लेकिन इसे यूटीसी के रूप में संग्रहीत किया जाता है।) तो यह उस चीज के लिए है जिसे मैंने पहले "पूर्ण" घटना कहा था।

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

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


एसक्यूएल एजेंट

SQL एजेंट शेड्यूलर और भी बदतर है, इसमें आप केवल स्थानीय सर्वर समय का उपयोग कर सकते हैं। फिर से, कोई समय क्षेत्र निर्दिष्ट नहीं किया जा सकता है, और आप यूटीसी को भी निर्दिष्ट नहीं कर सकते हैं।

इसका अनुरोध किया गया है , लेकिन स्वीकार नहीं किया गया।


तो नीचे पंक्ति, विशिष्ट उपकरण एसक्यूएल एजेंट और विंडोज टास्क शेड्यूलर के साथ, आपके पास हर बार परिवर्तन करने के लिए मैन्युअल परिवर्तन हैं, है ना? या संभावित रूप से, शेड्यूलर से चलाया गया कोड यूटीसी समय की फिर से जांच कर सकता है, फिर संभवतः एक देरी (गिरावट में) करें, लेकिन मैन्युअल परिवर्तन के अलावा अन्य स्प्रिंग में काम नहीं करने से बचने का कोई तरीका नहीं है। या, शायद एक स्क्रिप्ट वास्तव में अनुसूची को फिर से शुरू करती है?
नीलवैल्ट्स

मैंने विंडोज टास्क शेड्यूलर और एसक्यूएल एजेंट के बारे में जानकारी के साथ उत्तर को अपडेट किया। न ही पूरी तरह से सही कर रहे हैं। यदि आप अपना स्वयं का समाधान विकसित करना चाहते हैं, तो आप Quartz.net को देखना चाहते हैं ।
मैट जॉनसन-पिंट

अल्पावधि में, आप विशिष्ट यूटीसी समय पर चलने के लिए अपने कार्यों को परिभाषित करने के लिए उस बॉक्स के साथ विंडोज टास्क शेड्यूलर का उपयोग कर सकते हैं। लेकिन आप शायद चाहते हैं कि वे एक बार के कार्य हों जो आप अपने स्वयं के कोड से प्रोग्रामेटिक रूप से बनाते हैं ताकि आप बाकी को ध्यान में रख सकें।
मैट जॉनसन-पिंट

एक और शानदार जवाब!
नीलवैल्ट्स

1

देखभाल नहीं करके, आम तौर पर।

प्रश्न पूछें "तो क्या होगा यदि कार्य दो बार चलता है?"

आम तौर पर, यह बात नहीं होने वाली है, इसलिए आपको कुछ भी करने की आवश्यकता नहीं है। अगर यह मायने रखता है, तो सबसे आसान उपाय यह है कि दिन की बचत के समय में बदलाव से प्रभावित घंटे को काम से हटा दें।


अगर मुझे परवाह नहीं होती, तो मैं नहीं पूछता। कुछ बात, कुछ नहीं। 2:00 बजे, हमारे पास ऐसी नौकरियां हैं जो फ़ाइल निकालती हैं और इसे हमारे विक्रेताओं को भेजती हैं। मुझे नहीं लगता कि 2:00 दोहराएंगे। हम जोड़ा बीमा के लिए बस 2:05 में स्थानांतरित करने जा रहे हैं। हमारे पास बैकअप, स्मार्ट इंडेक्स जॉब्स आदि हैं ... लेकिन सौभाग्य से वे बाद में हैं।
नीलवैलर्स

1
@NealWalters मुझे लगता है कि यह एक निष्पक्ष बिंदु है, निराशाजनक रहने के लिए निष्पक्ष होना: अगर यह मायने नहीं रखता है कि यदि कोई कार्य दो बार चलता है तो चिंता क्यों करें। मैं आपके बारे में नहीं जानता, लेकिन मेरे पास चिंता करने के लिए बहुत सी चीजें हैं जिनके बारे में चिंता किए बिना मुझे चिंतित होने की आवश्यकता है। अगर इससे कोई फर्क पड़ता है, तो आपको पहले से ही किसी भी तरह की जाँच करने के लिए इसे कोड करना चाहिए । कहा जा रहा है कि, निश्चित रूप से यह एक अच्छा विचार है कि सामान को समय पर वापस लाने के लिए शेड्यूल करने वाले सामान से बचने के लिए घड़ियों को वापस जाना है - जो सिर्फ परेशानी के लिए पूछ रहा है।
रॉब मिर

यह मेरी पसंद नहीं है, हम सुबह के समय हवाई अड्डों पर एक्सट्रैक्ट फाइल भेजते हैं, और यही वह समय है जब वे फाइल चाहते हैं। हम बिज़टैक, एक संदेश आधारित प्रणाली का उपयोग कर रहे हैं, इसलिए इस तरह की चीजों के लिए दोबारा जांचना कठिन है। यह थोड़ा निराशाजनक है कि SQL अनुसूचक और Windows कार्य अनुसूचक दैनिक UTC समय की अनुमति नहीं देता है।
नीलवैल्ट्स

1

जैसा कि आपने बताया, 1AM और 2AM के बीच का घंटा DST के अंत में दोहराता है; जब उल्टा परिवर्तन होता है (DST की शुरुआत) 2AM और 3AM के बीच का समय नहीं होगा (और आपकी नौकरी नहीं चलेगी)। आपके सबसे अच्छे विकल्प होने जा रहे हैं

  • यूटीसी के लिए नौकरी अनुसूची चलाते हैं
  • बदलाव (12:59 AM या 3AM) के बाहर एक समय में नौकरी चलाएं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.