नॉलेजबेस · लिनक्स
क्रोन जॉब्स विन्यास
अंतिम बार अद्यतन किया गया 2020-01-18
कृपया जाँच करें कि ईमेल प्राप्त करने के लिए आपके पास एक वैध ईमेल खाता है या नहीं। कृपया'क्रोन जॉब्स कॉन्फ़िगरेशन'पर अगला लेख पढ़ें और यदि आपको अभी भी सहायता की आवश्यकता है, तो एक समर्थन टिकट उठाएं।
क्रोन is a commonly confusing and misconfigured aspect of the operating system. Technically, cron is just the clock daemon (/usr/sbin/cron or perhaps /usr/sbin/crond) that executes commands at specific times. However, a handful of configuration files and programs go into making up the cron package. Like many system processes, cron never ends. The controlling files for cron are the cron-tables or crontabs. The crontabs are often located in /var/spool/cron/crontab. However, on SuSE you will find them in /var/spool/cron/tabs. The names of the files in this directory are the names of the users that submit the cron jobs.
अन्य यूनिक्स बोलियों के विपरीत, लिनक्स क्रोन डेमन अगली क्रोन नौकरी तैयार होने तक नहीं सोता है। इसके बजाय, जब क्रोन एक काम पूरा करता है, तो यह मिनट में एक बार अधिक काम चलाने के लिए जाँच करता रहेगा। इसके अलावा, आपको फ़ाइलों को सीधे संपादित नहीं करना चाहिए। आप उन्हें vi जैसे टेक्स्ट एडिटर से संपादित कर सकते हैं, हालांकि चीजों को गड़बड़ करने की संभावना है। इसलिए, आपको लिनक्स द्वारा प्रदान किए गए उपकरण का उपयोग करना चाहिएः क्रोंटैब। (अधिक विवरण के लिए मैन-पेज देखें)
क्रोंटैब उपयोगिता में कई कार्य होते हैं। यह वह साधन है जिसके द्वारा क्रोन कार्य वाली फ़ाइलों को प्रणाली में प्रस्तुत किया जाता है। दूसरा, यह आपके क्रोंटैब की सामग्री को सूचीबद्ध कर सकता है। यदि आप root हैं, तो यह किसी भी उपयोगकर्ता के लिए कार्य भी जमा कर सकता है और सूचीबद्ध कर सकता है। समस्या यह है कि कार्य व्यक्तिगत रूप से प्रस्तुत नहीं किए जा सकते हैं। क्रोंटैब का उपयोग करके, आपको एक ही समय में सभी कार्य जमा करने होंगे।
शुरू में, यह थोड़ा परेशान करने वाला लग सकता है। हालाँकि, आइए किसी काम को "जोड़ने" की प्रक्रिया पर एक नज़र डालते हैं। एक क्रॉन काम जोड़ने के लिए, आपको पहले-l विकल्प के साथ मौजूदा क्रोंटैब की सामग्री को सूचीबद्ध करना होगा। यदि आप root हैं और किसी अन्य उपयोगकर्ता के क्रोंटैब में कुछ जोड़ना चाहते हैं, तो-u विकल्प का उपयोग करें और उसके बाद उपयोगकर्ता के लॉगनेम का उपयोग करें। फिर इस क्रोंटैब को एक फ़ाइल में पुनर्निर्देशित करें, जिसे आप फिर संपादित कर सकते हैं। (ध्यान दें कि कुछ प्रणालियों पर क्रोंटैब में-e ("संपादित" के लिए) है, जो आपके लिए सभी काम करेगा। अधिक विवरण के लिए मैन-पेज देखें।)
उदाहरण के लिए, मान लीजिए कि आप root उपयोगकर्ता हैं और यू. यू. सी. पी. उपयोगकर्ता के क्रोंटैब में कुछ जोड़ना चाहते हैं। सबसे पहले, इस कमांड के साथ मौजूदा क्रोंटैब प्रविष्टि का आउटपुट प्राप्त करें।
crontab -l -u uucp >/tmp/crontab.uucp
एक प्रविष्टि जोड़ने के लिए, बस एक नई पंक्ति शामिल करें। फ़ाइल को सहेजें, अपने संपादक से बाहर निकलें, और क्रोंटैब उपयोगिता को फिर से चलाएं। इस बार, फ़ाइल को सूचीबद्ध करने के लिए-l को छोड़ दें, लेकिन फ़ाइल का नाम शामिल करें। क्रोंटैब उपयोगिता एसटीडीएन से इनपुट भी स्वीकार कर सकती है, ताकि आप फ़ाइल का नाम छोड़ सकें और क्रोंटैब आपको कमांड लाइन पर क्रोंजॉब्स डालने की अनुमति देगा। ध्यान रखें कि कोई भी पिछला क्रोंटैब हटा दिया गया है, चाहे आप किसी भी विधि का उपयोग करें।
The file /tmp/crontab.uucp now contains the contents of UUCPs crontab. It might look something like this:
39,9 * * * * /usr/lib/uucp/uudemon.hour > /dev/null
10 * * * * /usr/lib/uucp/uudemon.poll > /dev/null
45 23 * * * ulimit 5000; /usr/lib/uucp/uudemon.clean > /dev/null
48 10,14 * * 1-5 /usr/lib/uucp/uudemon.admin > /dev/null
अपनी उपस्थिति के बावजूद, प्रत्येक क्रोंटैब प्रविष्टि में केवल छह क्षेत्र होते हैं। पहले पाँच कार्य को निष्पादित करने के समय का प्रतिनिधित्व करते हैं और छठा वास्तविक आदेश है। पहले पाँच क्षेत्र या तो एक स्थान या एक टैब द्वारा अलग किए जाते हैं और क्रमशः निम्नलिखित इकाइयों का प्रतिनिधित्व करते हैंः
मिनट (0-59)
घंटा (0-23)
महीने का दिन (1-31)
वर्ष का महीना (1-12)
सप्ताह का दिन (0-6,0 = रविवार)
सभी संभावित मानों को निर्दिष्ट करने के लिए, एक तारांकन चिह्न (*) का उपयोग करें। आप केवल उस एक मान को शामिल करके एक ही मान निर्दिष्ट कर सकते हैं। उदाहरण के लिए, पिछले उदाहरण में दूसरी पंक्ति का मान पहले क्षेत्र में 10 है, जिसका अर्थ है घंटे के 10 मिनट बाद। क्योंकि अन्य सभी चार समय क्षेत्र तारांकन हैं, इसका मतलब है कि आदेश हर दिन के हर घंटे को घंटे के 10 मिनट बाद चलाया जाता है।
मानों की सीमाएं पहले मान, एक डैश और अंतिम मूल्य से बनी होती हैं। उदाहरण के लिए, चौथी पंक्ति में सप्ताह के कॉलम के दिन एक सीमा (1-5) होती है, जिसका अर्थ है कि आदेश केवल 1-5 दिनों, सोमवार से शुक्रवार तक निष्पादित किया जाता है।
अलग-अलग मानों को निर्दिष्ट करने के लिए जो एक सीमा के भीतर नहीं हैं, अलग-अलग मानों को अल्पविराम से अलग करें। चौथे उदाहरण में, घंटे के क्षेत्र में दो मान 10 और 14 हैं। इसका मतलब है कि आदेश सुबह 10 बजे और दोपहर 2 बजे चलाया जाता है।
ध्यान दें कि समय योगात्मक हैं। आइए एक उदाहरण देखते हैंः
10 * 1,16 * 1-5 /usr/local/bin/command
आदेश पहले और सोलहवें को हर घंटे के 10 मिनट बाद, साथ ही सोमवार से शुक्रवार तक चलाया जाता है। यदि पहला या सोलहवां सप्ताहांत पर होता, तो आदेश अभी भी चलता क्योंकि महीने का दिन क्षेत्र लागू होता। हालाँकि, इसका मतलब यह नहीं है कि यदि पहला सोमवार है, तो आदेश दो बार चलाया जाता है।
क्रोंटैब प्रविष्टि को केवल हर घंटे या हर दिन की तुलना में अलग-अलग अंतरालों पर चलाने के लिए परिभाषित किया जा सकता है। ग्रैनुलरिटी को हर दो मिनट या हर तीन घंटे में क्रोंटैब में प्रत्येक व्यक्तिगत प्रविष्टि को रखे बिना निर्दिष्ट किया जा सकता है।
मान लीजिए कि हम पिछली कमांड को घंटे के 10 मिनट बाद नहीं, बल्कि हर दस मिनट में चलाना चाहते थे। हम एक प्रविष्टि कर सकते थे जो इस तरह दिखती थी।:
0,10,20,30,40,50 * 1,16 * 1-5 /usr/local/bin/command
यह हर 10 मिनट में चलता हैः घंटे के अंत में, 10 मिनट बाद, 20 मिनट बाद, और इसी तरह। जीवन को आसान बनाने के लिए, हम बस इस तरह से प्रविष्टि बना सकते हैंः
*/10 * 1,16 * 1-5 /usr/local/bin/command
यह वाक्यविन्यास कुछ प्रशासकों के लिए नया हो सकता है। (यह मेरे लिए था।) स्लैश (/) कहता है कि विशिष्ट अंतराल के भीतर (इस मामले में, हर मिनट), हर इतने मिनट में कमांड चलाएँ; इस मामले में, हर 10 मिनट में।
हम इसका उपयोग तब भी कर सकते हैं जब हम एक सीमा निर्दिष्ट करते हैं। उदाहरण के लिए, यदि काम केवल घंटे के बाद 20 मिनट और घंटे के बाद 40 मिनट के बीच चलना था, तो प्रविष्टि इस तरह दिख सकती हैः
20-40 * 1,16 * 1-5 /usr/local/bin/command
क्या होगा यदि आप चाहते हैं कि यह इन समय पर चले, लेकिन केवल हर तीन मिनट में? रेखा इस तरह दिख सकती हैः
20-40/3 * 1,16 * 1-5 /usr/local/bin/command
चीजों को और भी जटिल बनाने के लिए, आप कह सकते हैं कि आप चाहते थे कि आदेश घंटे और 20 मिनट के बीच हर दो मिनट में, 20 और 40 मिनट के बीच हर तीन मिनट में, फिर 40 मिनट के बाद और घंटे के बीच हर 5 मिनट में चले।
0-20/2,21-40/3,41-59/5 * 1,16 * 1-5 /usr/local/bin/command
एक बहुत अच्छी बात जो बहुत सी लिनक्स बोलियाँ करती हैं, वह यह है कि आप सप्ताह के दिनों और महीनों के लिए संक्षिप्त शब्दों को निर्दिष्ट कर सकते हैं। यह याद रखना बहुत आसान है कि एफ. आर. आई. 5 के बजाय शुक्रवार के लिए है।
समय क्षेत्रों में कुछ त्रुटियों को छोड़कर, त्रुटियों की सूचना तब तक नहीं दी जाती जब तक कि क्रॉन कमांड नहीं चलाता है। सभी त्रुटि संदेश और आउटपुट उपयोगकर्ताओं को मेल किए जाते हैं। कम से कम क्रोंटैब मैन-पेज यही कहता है और यह मूल रूप से सच है। हालाँकि, जैसा कि आप पिछले उदाहरणों में देखते हैं, आप stdout को/dev/null पर पुनर्निर्देशित कर रहे हैं। यदि आप चाहते हैं, तो आप वहाँ stderr को भी पुनर्निर्देशित कर सकते हैं और आप कभी नहीं देखेंगे कि क्या कोई त्रुटि थी।
आउटपुट उपयोगकर्ता को मेल किया जाता है क्योंकि कोई वास्तविक टर्मिनल नहीं है जिस पर क्रोनजॉब्स निष्पादित किए जा रहे हैं। इसलिए, त्रुटियों को प्रदर्शित करने के लिए कोई स्क्रीन नहीं है। साथ ही, इनपुट को स्वीकार करने के लिए कोई कीबोर्ड नहीं है। क्या इसका मतलब है कि आप क्रोन जॉब को इनपुट नहीं दे सकते हैं? नहीं। शेल स्क्रिप्ट पर चर्चा पर वापस सोचें। हम एसटीडीएन, एसटीडाउट और एसटीडीआरआर को फिर से परिभाषित कर सकते हैं। इस तरह से वे सभी फ़ाइलों को इंगित कर सकते हैं और हमारी अपेक्षा के अनुसार व्यवहार कर सकते हैं।
एक बात जो मैं बताना चाहूँगा वह यह है कि मैं क्रोंटैब के कमांड फ़ील्ड में पुनर्निर्देशन करने की वकालत नहीं करता। मुझे वहाँ जितना संभव हो उतना कम करना पसंद है। इसके बजाय, मैं एक शेल स्क्रिप्ट के लिए पूर्ण मार्ग रखता हूँ। फिर मैं कुछ सरल के साथ क्रोंटैब प्रविष्टि का परीक्षण कर सकता हूँ। एक बार जब यह काम कर जाता है, तो मैं क्रोंजैब को फिर से जमा किए बिना शेल स्क्रिप्ट में बदलाव कर सकता हूँ।
ध्यान रखें कि क्रॉन सटीक नहीं है। यह प्रत्येक मिनट के शीर्ष पर खुद को सिंक्रोनाइज़ करता है। एक व्यस्त प्रणाली में जिसमें आप घड़ी की टिक खो देते हैं, कार्य निर्धारित समय के कुछ मिनट बाद तक निष्पादित नहीं किए जा सकते हैं। इसके अलावा, उच्च प्राथमिकताओं वाली अन्य प्रक्रियाएं भी हो सकती हैं जो क्रोन कार्य में देरी करती हैं। कुछ मामलों में, (विशेष रूप से बहुत व्यस्त प्रणालियों पर) कार्य समाप्त हो सकते हैं यदि वे हर मिनट चलाए जाते हैं।
क्रोन सुविधा में दो फ़ाइलों के माध्यम से पहुँच की अनुमति है, दोनों में/आदि। यदि आपके पास एक फ़ाइल cron.allow है, तो आप निर्दिष्ट कर सकते हैं कि किन उपयोगकर्ताओं को क्रोन का उपयोग करने की अनुमति है। cron.deny कहता है कि किसे विशेष रूप से क्रोन का उपयोग करने की अनुमति नहीं है। यदि कोई भी फ़ाइल मौजूद नहीं है, तो केवल सिस्टम उपयोगकर्ताओं के पास पहुँच है। हालाँकि, यदि आप चाहते हैं कि सभी के पास पहुँच हो, तो एक प्रविष्टि cron.deny फ़ाइल बनाएँ। दूसरे शब्दों में, किसी को भी पहुँच से वंचित नहीं किया जाता है।
It is often useful for root to run jobs as a different user without having to switch users (for example, using the su command). Most Linux dialects provide a mechanism in the form of the /etc/crontab file. This file is typically only writable by root and in some cases, only root can read it (which is often necessary in high security environments). The general syntax is the same as the standard crontabs, with a couple of exceptions.
पहला अंतर हेडर है, जिसे आप यहाँ देख सकते हैंः
शेल =/बिन/श
पथ =/यूएसआर/बिनः/यूएसआर/एसबिनः/एसबिनः/बिनः/यूएसआर/लिब/न्यूज/बिन
एम. ए. आई. एल. टी. ओ. = root
#
#cron.hourly, cron.daily, cron.weekly, और cron.monthly में स्क्रिप्ट की जाँच करें।
#
59 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly
14 0 * * * root rm -f /var/spool/cron/lastrun/cron.daily
29 0 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly
44 0 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly
शेल चर उस खोल को परिभाषित करता है जिसके तहत प्रत्येक कमांड चलेगा। पथ चर सामान्य पथ पर्यावरण चर की तरह है और खोज पथ को परिभाषित करता है। मेल्टो चर कहता है कि किसे ईमेल संदेश प्राप्त करना चाहिए, जिसमें त्रुटि संदेश और निष्पादित आदेशों का मानक आउटपुट शामिल है।
The structure of the actual entries is pretty much the same with the exception of the user name (root in each case here). This way, the root users (or whoever can edit /etc/crontab) can define which user executes the command. Keep in mind that this can be a big security hole. If someone can write to this file, they can create an entry that runs as root and therefore has complete control of the system.
क्रॉन "सूट" में अगला कमांड है। इसका कार्य एक विशिष्ट समय पर एक कमांड को निष्पादित करना है। अंतर यह है कि एक बार जब कार्य चालू हो जाता है, तो यह सिस्टम से गायब हो जाता है। क्रॉन के लिए, दो फाइलें, at.allow और at.deny, कार्यक्रम पर समान प्रभाव डालती हैं।
बैच कमांड का उपयोग एक बार कमांड चलाने के लिए भी किया जाता है। हालांकि, बैच के साथ जमा किए गए कमांड तब चलाए जाते हैं जब सिस्टम उसके पास आता है, जिसका अर्थ है जब सिस्टम कम व्यस्त होता है, उदाहरण के लिए, आधी रात में। यह संभव है कि इस तरह के काम पूरे दिन फैले रहें, सिस्टम के भार के आधार पर।
ध्यान देने वाली एक बात है एट और बैच का व्यवहार। दोनों कमांड लाइन से कमांड के नामों को स्वीकार करते हैं न कि कमांड के लिए तर्क के रूप में। आपको पहले कमांड को एक नई लाइन में लाने के लिए चलाना होगा, जहां आप उन कमांडों को डालते हैं जिन्हें आप निष्पादित करना चाहते हैं। प्रत्येक कमांड के बाद, एंटर दबाएं। जब आप कर लेते हैं, तो सी. टी. आर. एल.-डी दबाएं।
क्योंकि ये दोनों आदेश एस. टी. डी. आई. एन. से आदेश स्वीकार करते हैं, आप हर बार एक नई पंक्ति पर ऐसा किए बिना आदेश दर्ज कर सकते हैं। एक संभावना है एक फ़ाइल से इनपुट को पुनर्निर्देशित करना। उदाहरण के लिए
अभी + 1 घंटा <कमांड _ लिस्ट
जहाँ कमांड _ लिस्ट एक फ़ाइल है जिसमें आदेशों की सूची होती है। आपके पास पाइप के अंत में (या बैच) भी हो सकता है
कैट कमांड लिस्ट। अभी + 1 घंटा
कैट कमांड सूची। बैच
Another interesting thing about both at and batch is that they create a kind of shell script to execute your command. When you run at or batch, a file is created in /usr/spool/cron/atjobs. This file contains the system variables that you would normally have defined, plus some other information that is contained in /usr/lib/cron.proto. This essentially creates an environment as though you had logged in.
हमें बताएँ कि क्या रहना है।
A short conversation with an engineer. No quote-bot, no callback queue.