क्या मैं क्रोन को "यादृच्छिक" बना सकता हूं?


12

शायद मैं पूरी तरह से पागल हूं, और अगर ऐसा है - तो ठीक है। लेकिन मैं किस तरह से एक बेतरतीब संदेश प्रसारित करने के लिए एक नौकरी शेड्यूल करूँगा, जैसे से fortune?

स्पष्टीकरण
हाँ - यह मेरा व्यक्तिगत कार्य केंद्र है - किसी प्रोडक्शन सर्वर पर कुछ जीतने की योजना नहीं बनाना :)

जवाबों:


12

atइस तरह के उद्देश्य के लिए एक सरल इंटरफ़ेस है यदि atस्थापित किया गया है, तो मशीन चल रही है atdऔर उपयोगकर्ता को कमांड का उपयोग करने की अनुमति है।

उदाहरण के लिए (सटीक सिंटैक्स का उपयोग करके man atया देखें info at),

at -f फ़ाइल now + 53 minutes

या

at -f फ़ाइल now + 2 hours

क्रमशः 53 मिनट या 2 घंटे में निर्दिष्ट फ़ाइल में कमांड चलाएंगे।

at फिर उपयुक्त (यादृच्छिक या अन्यथा) प्रारंभ, गिनती और समय-इकाइयों के साथ अनुसूचित नौकरी की शुरुआत में फिर से चलाया जा सकता है।

संपादित करें

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

  1. यदि अगला रन पिछले एक खत्म होने से पहले शुरू होता है (जैसे स्क्रिप्ट फिर से प्रवेश करता है?) या

  2. अगर कोई रन सही ढंग से पूरा नहीं हो पाता है या

  3. यदि अगला रन सभी या समय पर शुरू करने में विफल रहता है (उदाहरण के लिए मशीन चालू होने के कारण बंद है तो क्या होता है) और

  4. लॉगिंग और असफल या सफल रन की रिपोर्टिंग के बारे में।


यह एक दृष्टिकोण है जिसे मैंने नहीं माना था - और इसे पुनरावर्ती बनाया जा सकता है, यदि fileअगला atरन सही है?
वॉरेन

महान - अभी इसे आजमाया है, और महान काम करता है :)
वॉरेन

2
+1, लेकिन कुछ बातों पर विचार करें: यदि at-कमांड पहली पंक्ति है, और यदि स्क्रिप्ट लंबे समय तक चलती है (या यदि अंतराल कम है), तो एक साथ कई उदाहरणों को चलाने से सावधान रहें। लेकिन जब atस्क्रिप्ट की आखिरी पंक्ति में होता है, तो जाहिर है कि स्क्रिप्ट विफल होने पर फिर से शेड्यूल नहीं किया जाएगा। इसके अलावा, कमांड लाइन से स्क्रिप्ट को चलाने से यह (पुनः) शेड्यूल के साथ ही (और: कई शेड्यूल फिर एक साथ मौजूद हो सकता है) बना देगा। और cronईमेल के माध्यम से किसी भी त्रुटि (या सामान्य रूप से आउटपुट) भेजने का समर्थन करता है; मुझे नहीं पता कि atक्या ऐसा कुछ है?
अर्जन

@Arjan - कि - मैं भी यह (इस बिंदु पर) में नाकाम रहने और नहीं मुझे एक ईमेल भेजने .. के बाद से मैं सिर्फ यह उपयोग कर रहा हूँ मेरे कार्य केंद्र :) ..however पर मस्ती करने के लिए के बारे में चिंतित नहीं कर रहा हूँ है कुछ के बारे में सोचना अगर यह विस्तार करने के लिए कहा जाता है, तो घुसपैठ के लिए एक यादृच्छिक जांच
वॉरेन

स्क्रिप्ट मैं कल्पना कर रहा हूँ परवाह नहीं करेगा कि स्वयं की कितनी प्रतियाँ एक साथ चल रही हैं
वॉरेन

13

मेरे पास / etc / crontab में कई प्रकार की चीजें हैं और कुछ सेकंड में सटीक की आवश्यकता है। अब क्रोन हर समय दिखाई और केंद्रीकृत रखते हुए महीन संकल्प कर सकता है।

यह उदाहरण प्रत्येक 5 मिनट से पहले 10 से 50 सेकंड के बीच वेब पेज को प्राप्त करता है

4-59/5 * * * * root (sleep $(($RANDOM\%40+10))) && /etc/munin/plugins/someplugin prefetch

डेटा के धीमे चलने के लिए इसका सटीक समय नहीं है, लेकिन यह वेबपेजों के लिए प्रतीक्षा नहीं करने से मुनिन-नोड निष्पादन समय को यथासंभव कम रखने में मदद करता है। (प्लगइन आगे अनावश्यक हिट को कम करने के लिए 30 मिनट के लिए पृष्ठ को कैश करता है, लेकिन हर 5 मिनट में एक डेटाबेस को अपडेट करने की आवश्यकता होती है)।

"% N" के लिए \% - क्रोन विकल्प% पर ध्यान दें - एक पंक्ति पर मेल पाठ रखने के लिए उपयोगी।


यदि आप वेबपेजों को कैशिंग कर रहे हैं, तो आप जरूरी नहीं कि सटीक लोड परिणाम प्राप्त करने जा रहे हों
वॉरेन डिकैस

1
हां, मुझे पता है - 'डेटा धीमा चल रहा है' - प्लगइन को एक साइट से मुद्रा विनिमय दरें मिलती हैं और मैं प्रतिबंधित नहीं होना चाहता। (मैं व्यापारी नहीं हूं लेकिन मैं मुनिन रेखांकन देखने में बहुत समय बिताता हूं) मैंने स्थानीय मौसम के लिए एक समान प्लगइन बनाया। अंतहीन अनुप्रयोग!
एंडी ली रॉबिन्सन

1
अहा! .. बहुत ही शांत दृष्टिकोण :)
वॉरेन

6

आंतरिक रूप से cron, मुझे नहीं लगता कि ऐसी कोई सुविधा मौजूद है। मुझे लगता है कि सबसे अच्छा समाधान यह होगा कि आप अपने कमांड को शेल स्क्रिप्ट में रखें, और स्क्रिप्ट sleepके शीर्ष पर एक यादृच्छिक अंतराल रखें और $RANDOMवेरिएबल का उपयोग करें । फिर नियमित क्रोन जॉब में दिन में एक बार स्क्रिप्ट चलाएं।

#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2

1
नींद () एक लगभग गारंटी है कि इसे सेवा प्रदाता द्वारा मार दिया जाएगा। बेशक, वह सेवा प्रदाता है।
एक बौना

1
मुझे लगता है कि यह उसकी अपनी लिनक्स मशीन या किसी चीज़ पर था, अगर किसी को यादृच्छिक रूप से भाग्य प्रस्तुत करने में संकोच होता है
जॉन टी।

खैर, यह सच है।
एक बौना

नींद एक बुरा विचार क्यों है? बस पूछ रहा हूँ ...
तदेउस्ज़ ए। कदलोबोस्की

@ जॉन टी के लिए प्रश्न स्पष्ट किया
वॉरेन ने

6

यह इस पर निर्भर करेगा कि आप किस प्रकार के अंतराल के बाद हैं। लेकिन मान लेते हैं कि आप स्क्रिप्ट को 1:30 (हर 30 मिनट में एक बार) की संभावना के साथ बेतरतीब ढंग से चलाना चाहेंगे

  • 10 मिनट का कहना है, की परिधि के लिए अपने क्रोन लिपि का निर्माण करें। यह हर 30 मिनट में 3 बार आग लगाएगा।

  • स्क्रिप्ट के अंदर रैंड का उपयोग अगर एक स्टेटमेंट के लिए किया जाता है । आप रैंड को 0 और 2 के बीच एक संख्या वापस करना चाहते हैं। यदि यह 0 है तो इफ स्टेटमेंट की सामग्री को निष्पादित करें।

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


@ ए बौना - इस विचार के लिए धन्यवाद, बहुत - यह थोड़ा अधिक उपयोगी मार्ग होगा यदि मैं कुछ लगातार लेकिन अर्ध-यादृच्छिक आधार पर घुसपैठ आदि की जांच करना चाहता था
वॉरेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.