क्रोन हर 15 सेकंड में काम करता है


18

क्या आप मुझे सलाह दे सकते हैं कि मैं क्या लिखूं crontabताकि यह /usr/bin/chromium-browserहर 15 सेकंड में कुछ काम चला सके (परीक्षण के लिए )


Crontab के बजाय, कुछ अन्य इवेंट मैनेजमेंट सिस्टम पर भरोसा करें, उदाहरण के लिए: Perl's every.pm मॉड्यूल आपको ऐसा करने में मदद करेगा।
निखिल मुल्ले

जवाबों:


27

आप क्रोन के साथ एक मिनट की ग्रैन्युलैरिटी से नीचे नहीं जा सकते। आप क्या कर सकते हैं, हर मिनट, एक स्क्रिप्ट चलाएं जो आपकी नौकरी चलाती है, 15 सेकंड इंतजार करती है और दोहराती है। निम्नलिखित क्रॉस्टैब लाइन some_jobहर 15 सेकंड में शुरू होगी ।

* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job

यह स्क्रिप्ट मानती है कि नौकरी में 15 सेकंड से अधिक का समय नहीं लगेगा। निम्नलिखित थोड़ी अधिक जटिल स्क्रिप्ट अगले उदाहरण को नहीं चलाने का ख्याल रखती है यदि कोई चलाने में बहुत लंबा समय लेता है। यह प्रारूप का dateसमर्थन करने पर निर्भर करता है %s(उदाहरण के लिए जीएनयू या बिजीबॉक्स, इसलिए आप लिनक्स पर ठीक होंगे)। यदि आप इसे सीधे क्रॉस्टैब में रखते हैं, तो ध्यान दें कि %अक्षरों को \%क्रॉस्टैब लाइन में लिखा जाना चाहिए ।

end=$(($(date +%s) + 45))
while true; do
  some_job &
  [ $(date +%s) -ge $end ] && break
  sleep 15
  wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job

मैं हालांकि इस बात पर ध्यान दूंगा कि अगर आपको हर 15 सेकंड में जितनी बार नौकरी चलाने की आवश्यकता है, क्रोन शायद गलत दृष्टिकोण है। हालांकि, अल्पकालिक प्रक्रियाओं के साथ यूनिटीज अच्छी हैं, हर 15 सेकंड में एक प्रोग्राम लॉन्च करने का ओवरहेड गैर-नगण्य हो सकता है (यह इस बात पर निर्भर करता है कि प्रोग्राम की मांग कैसी है)। क्या आप हर समय अपना एप्लिकेशन नहीं चला सकते और क्या यह हर 15 सेकंड में अपने कार्य को अंजाम देता है?


यह भी हो सकता है: में i के लिए 1 2 3 4 ; do some_job & sleep 15; done(अंतिम नींद अगले रन को प्रभावित नहीं करेगी), लेकिन जिस तरह से आप करते हैं वह शायद आउटगोइंग क्रोनजोब मेल के समय के लिए बेहतर है (पिछले कुछ_जॉब के बाद भेजा गया, 15 के बाद के अंत में मेरा वैरिएंट)
ओलिवियर दुलैक


13

दूसरों की तुलना में अलग-अलग दृष्टिकोण: 4 क्रोनोज़र चलाएं, प्रत्येक 15 सेकंड से कंपित:

* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job

खुद में हस्तक्षेप करने से काम रोकने के लिए हम जीएनयू के माध्यम से 15 सेकंड के लिए अपने रन-टाइम की सीमा coreutils ' timeoutहर काम के लिए। हालाँकि, ध्यान दें कि यदि नौकरी 15 वीं के अंत में तुरंत ठीक से बाहर निकलने में विफल रहती है, तो आप अभी भी समस्याओं का सामना कर सकते हैं। यदि यह समस्या बन जाती है, तो कैसे हल करें, इसके विवरण के लिए कमांड मैनुअल देखें। यह भी ध्यान दें, यदि कमांड 15 से अधिक समय लेता है, और टाइमआउट इसे मारता है, तो आपको एक गैर-शून्य निकास स्थिति मिलेगी जो क्रोनजोब-ईमेल को ट्रिगर करेगी।


शानदार, यद्यपि दोहरावदार।
माइक कोर्मेंडी

1
अच्छा लगा। यदि एक प्रक्रिया लंबी चलती है, तो अगली प्रक्रिया संभवतः एक अलग कोर पर समाप्त हो जाएगी। सुनिश्चित नहीं हैं कि आप क्रोन नौकरियों के लिए जानबूझकर कोर आत्मीयता स्थापित कर सकते हैं, लेकिन यह इस दृष्टिकोण को और भी बेहतर बना सकता है।
टिम

@ अच्छा बिंदु। मुझे पता है कि कुछ हद तक एक संपादन में।
ओथियस

2

संक्षेप में, क्रॉन समय के साथ दानेदार नहीं है। सबसे कम अवधि आपको 1 मिनट मिलेगी।

#       .---------------- minute (0 - 59)
#       |       .------------- hour (0 - 23)
#       |       |       .---------- day of month (1 - 31)
#       |       |       |       .------- month (1 - 12) OR jan,feb,mar,apr ...
#       |       |       |       |       .----- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#       |       |       |       |       |
#       *       *       *       *       *       command to be executed
        *       *       *       *       /usr/bin/chromium-browser

हालाँकि आप एक स्क्रिप्ट लिख सकते हैं जो हर 15 सेकंड में चलेगी ...


मेरे पास एक लाइन * * * * * /usr/bin/chromium-browserहै कोंट्राब में। मैनुअल के अनुसार इसे हर मिनट चलना चाहिए लेकिन कुछ भी नहीं चल रहा है।
xralf

क्या इस तरह की स्क्रिप्ट लिखना मुश्किल है? क्या मुझे एक और प्रश्न पूछना चाहिए या क्या यह यहाँ लिखा जा सकता है?
xralf

क्रॉन जॉब्स में टर्मिनल नहीं होता है इसलिए मुझे ब्राउज़र के असफल होने की उम्मीद होगी। ऐसा चुपचाप कर सकता है।
बिलथोर

मेरे क्रोन लॉग रेडहेट के डेरिवेटिव के लिए / var / log / cron में स्थित हैं, अर्थात। फेडोरा, सेंटो आदि। यह आपके लिए यह वर्णन करने में भी मदद कर सकता है कि आप क्या करने की कोशिश कर रहे हैं ताकि लोगों के पास पूरी तस्वीर हो।
rfelsburg

1

अपने कोंट्राब में:

* * * *  /usr/bin/chromium-browser_starter

फिर में /usr/bin/chromium-browser_starter:

#!/bin/sh

# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).

for ((secs=0; secs<46; secs+=15)); do
    (sleep $secs; /usr/bin/chromium-browser "$@") &
done

wait

जब मैं ps aux | grep chromएक मिनट के बाद लिखता हूं तो मैं क्रोमियम-ब्राउज़र को चालू नहीं देख सकता।
xralf

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