आधी रात को हर दिन एक स्क्रिप्ट चलाने वाला क्रोन कैसे लिखेगा?


144

मैंने सुना है क्रॉस्टैब एक अच्छा विकल्प है, लेकिन मैं लाइन कैसे लिखूं और इसे सर्वर पर कहां डालूं?

जवाबों:


261

यहाँ एक अच्छा ट्यूटोरियल है कि क्राउन्ट क्या है और इसे उबंटू पर कैसे उपयोग किया जाए। आपकी कोंट्रेब लाइन कुछ इस तरह दिखाई देगी:

00 00 * * * ruby path/to/your/script.rb

( 00 00मध्यरात्रि - 0 मिनट और 0 घंटे इंगित करता है - और *हर महीने के हर दिन का मतलब है।)

वाक्य - विन्यास: 
  mm hh dd mt wd कमांड

  मिमी मिनट 0-59
  एचएच घंटे 0-23
  dd दिन 1-31 का
  mt महीने 1-12
  सप्ताह 4-7 का दिन (रविवार = 0 या 7)
  कमांड: जो आप चलाना चाहते हैं
  सभी संख्यात्मक मानों को * से बदला जा सकता है जिसका अर्थ है सभी

1
क्या आपको 'रन-एज़-यूज़र' कॉलम याद नहीं है?
लुकास किमोन

4
@LucasCimon उपयोगकर्ता स्तंभ (जो कमांड से पहले जाएगा) को /etc/crontab(Ubuntu पर ) में अनुमति दी गई है , लेकिन जब आप चलाते हैं crontab -eतो आप उपयोगकर्ता-विशिष्ट crontab का संपादन कर रहे हैं, जो इस कॉलम की अनुमति नहीं देता है। IIRC Ubuntu /etc/crontabमैन्युअल रूप से बाहर निकलने को हतोत्साहित करता है क्योंकि यह अधिलेखित हो सकता है। यहां देखें: stackoverflow.com/questions/8475694/…
जॉर्डन रनिंग

@ जोर्डन इसलिए रूट के लिए क्रॉस्टैब का जवाब हैsudo crotab -u root -e
21

40

मैन पेज से

linux$ man -S 5 crontab

   cron(8) examines cron entries once every minute.

   The time and date fields are:

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)
   ...
   # run five minutes after midnight, every day
   5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
   ...

यह विशेष "उपनाम" पर ध्यान देने के लिए अच्छा है जिसका उपयोग किया जा सकता है (मैन पेज में प्रलेखित), विशेष रूप से "@reboot" जिसका कोई समय और दिनांक विकल्प नहीं है।

   # Run once after reboot.
   @reboot         /usr/local/sbin/run_only_once_after_reboot.sh

आप इस ट्रिक का उपयोग प्रति मिनट कई बार अपने क्रॉन जॉब को चलाने के लिए भी कर सकते हैं।

   # Run every minute at 0, 20, and 40 second intervals
   * * * * *       sleep 00; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 20; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 40; /usr/local/sbin/run_3times_per_minute.sh

क्रॉन जॉब जोड़ने के लिए, आप तीन काम कर सकते हैं:

  1. उपयोगकर्ता के क्रॉस्टेब पर एक कमांड जोड़ें, जैसा कि ऊपर दिखाया गया है (और क्रॉस्टैब, सेक्शन 5, मैन पेज से)।

    • उपयोगकर्ता के crontab को रूट के रूप में संपादित करें crontab -e -u <username>
    • या अभी के साथ वर्तमान उपयोगकर्ता के crontab को संपादित करें crontab -e
    • आप EDITORपर्यावरण चर के साथ संपादक सेट कर सकते हैं
      • env EDITOR=nano crontab -e -u <username>
      • या अपने संपूर्ण शेल सत्र के लिए EDITOR का मान सेट करें
        1. export EDITOR=vim
        2. crontab -e
    • स्क्रिप्ट को निष्पादन योग्य बनाएं chmod a+x <file>


  1. क्रोन जॉब के रूप में एक स्क्रिप्ट / प्रोग्राम बनाएं, और इसे सिस्टम की एनाक्रोन /etc/cron.*lyनिर्देशिकाओं में जोड़ें

    • anacron /etc/cron.*ly निर्देशिका:
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly
    • जैसे की:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh - इसे अमल में लाएं
    • एनाक्रॉन मैन पेज भी देखें: man anacron
    • स्क्रिप्ट को निष्पादन योग्य बनाएं chmod a+x <file>
    • ये क्रोन कब आते हैं। * लिपि स्क्रिप्ट चलती है?
      • आरएचईएल / सेंटोस 5.x के लिए, वे /etc/crontabया में कॉन्फ़िगर किए गए हैं/etc/anacrontab एक निर्धारित समय पर चलाने के लिए
      • आरएचईएल / सेंटोस 6.x + और फेडोरा 17+ लिनक्स सिस्टम केवल इसे परिभाषित करते हैं /etc/anacrontab, और cron.hourly को परिभाषित करते हैं/etc/cron.d/0hourly


  1. या, एक में सिस्टम crontables बना सकते हैं /etc/cron.d

    • पहले वर्णित crontab सिंटैक्स (अतिरिक्त रूप से प्रत्येक कार्य को निष्पादित करने के लिए एक उपयोगकर्ता प्रदान करने के साथ) एक फ़ाइल में डाला जाता है, और फ़ाइल को /etc/cron.d निर्देशिका में छोड़ दिया जाता है।
    • ये सिस्टम पैकेजिंग (जैसे RPM संकुल) को प्रबंधित करना आसान है, इसलिए आमतौर पर आवेदन विशिष्ट हो सकता है।
    • वाक्यविन्यास अंतर यह है कि एक उपयोगकर्ता को क्रोन नौकरी के लिए समय / तिथि फ़ील्ड के बाद और निष्पादित करने के लिए कमांड से पहले निर्दिष्ट किया जाना चाहिए।
    • इसमें फाइलें जोड़ी गईं /etc/cron.d को निष्पादन योग्य होने की आवश्यकता नहीं है।
    • यहां एक उदाहरण कार्य है जिसे उपयोगकर्ता के रूप में निष्पादित किया जाता है someuser, और /bin/bashशेल के उपयोग के रूप में मजबूर किया जाता है।


   File: /etc/cron.d/myapp-cron
   # use /bin/bash to run commands, no matter what /etc/passwd says
   SHELL=/bin/bash
   # Execute a nightly (11:00pm) cron job to scrub application records
   00 23 * * * someuser /opt/myapp/bin/scrubrecords.php

5

कभी-कभी आपको rvm के साथ crontab का उपयोग करके PATH और GEM_PATH को निर्दिष्ट करना होगा।

ऐशे ही:

# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global

# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb

4

एक क्रोन नौकरी सेटअप करने के लिए त्वरित गाइड

एक नई टेक्स्ट फ़ाइल बनाएं, उदाहरण: mycronjobs.txt

प्रत्येक दैनिक कार्य (00:00, 03:45) के लिए, mycronjobs.txt में शेड्यूल लाइनों को सहेजें

00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh

क्रोन को नौकरियां भेजें (हर बार जब आप इसे चलाते हैं, क्रोन हटाता है जो संग्रहीत किया गया है और mycronjobs.txt में नई जानकारी के साथ अपडेट होता है )

crontab mycronjobs.txt

अतिरिक्त उपयोगी जानकारी

वर्तमान क्रोन नौकरियां देखें

crontab -l

सभी क्रोन नौकरियों को हटा दें

crontab -r

आपका कॉन्टैब सिंटेक्स 03:45 के लिए गलत है। Crontab फ़ील्ड्स मिनट तब घंटा, "45 03" हैं - आपके पास अपनी पोस्ट में पीछे की तरफ है।
रसेल ई Glaue

1

आप शेल स्क्रिप्ट को दो तरह से निष्पादित कर सकते हैं, या तो क्रोन जॉब का उपयोग करके या शेल स्क्रिप्ट लिखकर

मान लें कि आपका स्क्रिप्ट नाम "yourcript.sh" है

पहले स्क्रिप्ट की उपयोगकर्ता अनुमति की जांच करें। स्क्रिप्ट की उपयोगकर्ता अनुमति की जांच करने के लिए कमांड के नीचे का उपयोग करें

ll स्क्रिप्ट। श

यदि स्क्रिप्ट रूट में है, तो नीचे कमांड का उपयोग करें

सुडो क्रैताब-ई

दूसरा यदि स्क्रिप्ट उपयोगकर्ता "ubuntu" को रखती है, तो नीचे कमांड का उपयोग करें

Crontab -e

अपने crontab में निम्न पंक्ति जोड़ें: -

५५ २३ * * * * /पथ / //yourscript.sh

ऐसा करने का एक और तरीका यह है कि आप एक स्क्रिप्ट लिखें और उसे बैकग्राउड में चलाएं

यहाँ वह स्क्रिप्ट है जहाँ आपको अपना स्क्रिप्ट नाम डालना है (जैसे: - youscript.sh) जो प्रतिदिन 23:55 बजे चलने वाली है

#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done

इसे एक फ़ाइल में सहेजें (इसे "every-day.sh" नाम दें)

नींद 1d - इसका मतलब है कि यह एक दिन तक इंतजार करता है और फिर फिर से चलता है।

अब अपनी script.use को कमांड के नीचे अनुमति दें: -

chmod + x हर- day.sh

अब, "शेलहॉप" का उपयोग करके इस शेल स्क्रिप्ट को पृष्ठभूमि में निष्पादित करें। यह आपके सत्र से लॉगआउट करने के बाद भी स्क्रिप्ट को निष्पादित करता रहेगा।

स्क्रिप्ट निष्पादित करने के लिए कमांड का उपयोग करें।

nohup ./every-day.sh &

नोट: - प्रतिदिन 23:55 बजे "yourcript.sh" को चलाने के लिए, आपको रात के 23:55 बजे "every-day.sh" स्क्रिप्ट निष्पादित करनी होगी।


0

इस वाक्य को एक crontab फ़ाइल में रखें: 0 0 * * / usr / स्थानीय / बिन / अजगर / अपनाना / byAccount.py> /var/log/cron.log 2> & 1

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