प्रत्येक दिन विभिन्न मापदंडों के साथ एक क्रोनजॉब चलाना


12

मैं एक प्रोग्रामर हूं, और क्रोन के बारे में बहुत कुछ नहीं जानता, लेकिन मैं जानना चाहता हूं कि क्या यह संभव है।

कहते हैं कि मेरे पास एक सरणी [option1, option2, option3]और एक स्क्रिप्ट है जिसे मैं NodeJS में चलाता हूं script.js। मैं इस स्क्रिप्ट को हर दिन 1 बजे चलाना चाहता हूं। इसकी cronकमान यह होगी:

0 1 * * * node ~/script.js

खैर अब मुश्किल हिस्सा है, मैं हर दिन विकल्पों को घुमाना चाहता हूं, इसलिए उदाहरण के लिए सोमवार को मैं दौड़ना चाहता हूं node ~/script.js option1, अगले दिन node ~/script.js option2और इसी तरह। इसके अलावा, मैं जरूरत पड़ने पर विकल्पों को जोड़ने / हटाने में सक्षम होना चाहता हूं, लेकिन रोटेशन बरकरार रहना चाहिए।

क्या यह किसी भी तरह से संभव है? मुझे पता है कि मैं नोड के भीतर भी ऐसा कर सकता हूं, लेकिन मैं इसे स्क्रिप्ट के बाहर से करूंगा, और स्क्रिप्ट को वैसे ही छोड़ दूंगा।


2
मैं इस स्क्रिप्टिंग की सिफारिश करूंगा कि क्रोन इसे स्वयं करने की कोशिश कर रहा है।
EarthmeLon

जवाबों:


15

इसके अलावा, मैं जरूरत पड़ने पर विकल्पों को जोड़ने / हटाने में सक्षम होना चाहता हूं, लेकिन रोटेशन बरकरार रहना चाहिए।

यह मुश्किल है। विकल्पों की सूची में संशोधन के बाद रोटेशन के बरकरार रहने का क्या मतलब है? आखिरकार, आप पूरी तरह से सूची का पुनर्निर्माण कर सकते हैं, जहां आप थे, किसी भी सुराग को नष्ट कर सकते हैं।

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

#!/bin/bash
cd ~/script-options
next=$(ls -rt | head -n1)
touch -- "${next}"
node ~/script.js ${next} or $(<"${next}")

यदि आप चाहते हैं, तो आप इसे क्रोन के लिए एक पंक्ति में भी लिख सकते हैं, हालांकि इसे पढ़ना कठिन हो जाएगा।

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


"सूची संपादन" के पार विकल्प अनुक्रमिकता को प्रबंधित करने के तरीके के लिए बिल्कुल +1।
हेगन वॉन एटिजन

उत्तर के लिए धन्यवाद, मुझे यह पसंद है और इसका उपयोग करूंगा। जब मैं सूची में नए लोगों को जोड़ता हूं, तो रोटेशन का सटीक क्रम उतना महत्वपूर्ण नहीं है। केवल एक चीज जो मायने रखती है, वह यह है कि सभी को प्रत्येक सप्ताह 1-2 रन मिलते हैं, और एक ही दिन दो नहीं।
सैफ बेचन

2
$(ls -rt | head -n1)निश्चित रूप से उन फिल्नामों पर विराम लगेगा जिनमें नई-नई कहानियाँ शामिल हैं, लेकिन इस उद्देश्य के लिए आप शायद "बस ऐसा न करें" से दूर हो सकते हैं।
cjm

20

मान लीजिए कि आप सप्ताह के प्रत्येक दिन के लिए एक अलग विकल्प चाहते हैं। आप ऐसा कर सकते हैं:

  1. इनके लिए एक अलग क्रोन जॉब करें:

    0 1 * * 0 node ~/script.js option1
    0 1 * * 1 node ~/script.js option2
    0 1 * * 2 node ~/script.js option3
    

    आदि...

  2. है bashआप के लिए इच्छित विकल्प प्रदान करते हैं:

    0 1 * * * node ~/script.js case `date +%u` in 0 ) echo option1 ;; 1 ) echo option2 ;; 2 ) echo option3 ;;  esac
    

    (मैंने बाद को नहीं चलाया, इसलिए इसे कुछ ट्विकिंग की आवश्यकता हो सकती है - लेकिन यह सामान्य विचार है।)


2
उत्तर के लिए धन्यवाद, लेकिन मुझे लगता है कि यह गड़बड़ हो जाएगा। मुझे वास्तव में कहीं एक सरणी को परिभाषित करने की आवश्यकता है, अन्यथा यह काम नहीं करेगा। मैं echo option1आदि के साथ काम नहीं कर सकता , क्योंकि मेरे विकल्प सप्ताह से सप्ताह तक भिन्न हो सकते हैं। बीमार बस मेरे नोड ऐप में ऐसा करते हैं, और जिस पर मैं अपने डीबी में पिछले भाग गया था, उस पर नज़र रखता हूं।
सैफ बिचने

13

नहीं, मैं ऐसा करने का कोई साफ तरीका नहीं सोच सकता। बस एक साधारण शेल आवरण लिपि लिखें जो तारीख की जांच करती है और प्रत्येक दिन अपने आवश्यक विकल्पों के साथ अपना नोड एप्लिकेशन शुरू करती है।


+1 कुंजी 'कोई साफ रास्ता नहीं' है।
पाओलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.