क्रोन नौकरी, यादृच्छिक शुरुआत लेकिन समय सीमा के भीतर


12

मैं दिन में एक बार, रोज़, 0900 और 1200 के बीच किसी भी समय शुरू होने वाली स्क्रिप्ट चाहता
हूं। मैं डैश सिंटैक्स के बारे में पूरी तरह से निश्चित नहीं हूं - इसका मतलब यह है कि स्क्रिप्ट हर घंटे के बीच चलेगी 9-12, या यह कि इसके बीच शुरू होगा 9-12? क्योंकि मुझे बाद की जरूरत है।

जवाबों:


8

मैंने कभी भी एक क्रॉन कार्यान्वयन नहीं देखा है जो यादृच्छिक समय पर नौकरी चलाने का एक तरीका है। यह एक अजीब आवश्यकता है। जैसा कि प्रलेखन कहता है, 9 से 12 तक हर घंटे के 9-12लिए एक शॉर्टकट है 9,10,11,12, और इसका मतलब है।

यदि आप एक यादृच्छिक समय पर नौकरी चलाना चाहते हैं, तो अंतराल की शुरुआत में नौकरी चलाएं, और एक यादृच्छिक देरी जोड़ें। उदाहरण के लिए, 9 और 12 के बीच एक यादृच्छिक घंटे पर चलने के लिए:

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

ध्यान दें कि RANDOMबैश या ksh की आवश्यकता है, यह डिफ़ॉल्ट शेल में उपलब्ध नहीं हो सकता है।

यदि आप 9 और 12 के बीच एक यादृच्छिक समय पर चलाना चाहते हैं, तो दूसरे रिज़ॉल्यूशन के साथ, आप RANDOM % 10800देरी के रूप में उपयोग कर सकते हैं , लेकिन क्योंकि RANDOM0..32767 की सीमा में है, 0 और 32768% 10800 = के बीच देरी के लिए पूर्वाग्रह होगा 368. इस पूर्वाग्रह से बचने के लिए:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff

5
"यह एक अजीब आवश्यकता है।" मैं असहमत हूं। कई अनुप्रयोगों, विशेष रूप से उन है कि एक सर्वर (जैसे पैकेज प्रबंधकों या विन्यास प्रबंधन ग्राहकों) के साथ समय-समय पर जांच करने की जरूरत है, एक गरजना झुंड स्थिति से बचने के लिए अपने निष्पादन समय को कम करने की जरूरत है। वास्तव में, इस तरह के कई अनुप्रयोगों में अंतर्निहित विकल्प होते हैं (जैसे --randomwaitकि yum या --splayतर्क को शेफ-क्लाइंट को तर्क देना), लेकिन जो ऐसा नहीं करते हैं, उनके लिए एक यादृच्छिक निष्पादन समय एक नौकरी अनुसूचक में एक उपयोगी सुविधा होगी।
20 अक्टूबर को ज्येन्द्रियेन


2

मैंने अजगर लिपियों के लिए समान आवश्यकता को समाप्त किया, लेकिन स्क्रिप्ट के माध्यम से इसे लागू करना समाप्त कर दिया, यादृच्छिक + नींद कार्यों का उपयोग करके, फिर क्रॉन जॉब @ आधी रात को लॉन्च किया।

from time import sleep
import random

sleep_time = random.randint(0,7200)  #7200 seconds = 2 hours * 60 min * 60 sec
print(sleep_time)
sleep(sleep_time)

यह है कि लिनक्स डिस्ट्रोस से आम स्क्रिप्ट अक्सर यादृच्छिक समय शुरू करती है: एक निश्चित समय होता है, फिर शुरुआत में सोते हैं।
नेड 64
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.