Crontab और /etc/cron.hourly,daily,weekly का उपयोग करने के बीच अंतर


12

मेरे पास एक अनुसूचित स्क्रिप्ट है जो हमारी तोड़फोड़ करने वाली रिपॉजिटरी का प्रति घंटा svnsync बैकअप करता है। मैं इसे समस्याओं के बिना रूट क्रैटाब में एक प्रविष्टि से चला रहा था, लेकिन मैंने फैसला किया कि मैं इसे अतिरिक्त दृश्यता के लिए /etc/cron.hourly से चलाना चाहूंगा (और क्योंकि हमारे इंजीनियरों में से एक ने गलती से कॉस्ट्रैब को हटा दिया क्योंकि उसने सोचा था कि "स्ट्रोंटब" -r "का अर्थ है" कोंट्राब ;-) पढ़ें

Svnsync कमांड cron.hourly स्क्रिप्ट में एक संदेश के साथ विफल हो जाती है जिसमें कहा गया है कि SVN रिपॉजिटरी के लिए SSL प्रमाणपत्र को स्वीकार करने की आवश्यकता है (यह वह संदेश है जो आपको पहली बार इंटरेक्टिव रूप से प्राप्त होता है जब उपयोगकर्ता SVN रिपॉजिटरी एक्सेस करता है, लेकिन एक बार प्रमाण पत्र I संदेश स्वीकार नहीं किया गया है)।

तो यह मुझे लगता है कि स्क्रिप्ट को एक अलग उपयोगकर्ता वातावरण के तहत निष्पादित किया जा रहा है जब cron.hourly से चलाया जाता है जब रूट crontab के माध्यम से चलाया जाता है। क्या कोई अंतर समझा सकता है?

अद्यतन: मुझे अपने डिस्ट्रो का उल्लेख करना चाहिए, मैं CentOS 5.1 पर एनाक्रॉन का उपयोग कर रहा हूं।

अद्यतन 2: अब तक के सुझावों के लिए धन्यवाद; मुझे लगता है कि यह एक तोड़फोड़ के अधिक प्रश्न में बदल रहा है। मैं हमेशा अपने वातावरण को अपनी लिपियों में समेटने की कोशिश करता हूं, लेकिन यहाँ समस्या यह है कि मुझे यकीन नहीं है कि पर्यावरण में ऐसा क्या है (या इसमें कमी है) जो एसवीएन से एसएसएल प्रमाण पत्र मांगता है, जब मैं अपनी स्क्रिप्ट चलाता हूं तो स्वीकार किया जाता है cron.hourly। मैं अनुमान लगा रहा हूं कि रन-वे स्क्रिप्ट को निष्पादित करने के तरीके के साथ कुछ करना है।


1
यह आपके डिस्ट्रो और पसंद के क्रोन पैकेज को शामिल करने के लिए उपयोगी होगा।
डेन कार्ली

जवाबों:


4

आप '--config-dir' विकल्प का उपयोग करना चाहते हैं ताकि यह पता चल सके कि स्वीकृत प्रमाणपत्र कहां से मिल रहा है (जैसे ~ / .subversion डिफ़ॉल्ट रूप से)।

उस ने कहा, मुझे लगभग तय है कि आप कहीं न कहीं सुझाव के अनुसार हुक / पोस्ट-कमिट स्क्रिप्ट से svnsync को कॉल करना बेहतर समझेंगे । फिर आपका दर्पण हमेशा सिंक में होता है, बल्कि सिंक में जहां आपका मास्टर एक घंटे पहले था।


16

डेबियन / उबंटू प्रणाली पर cron.daily | साप्ताहिक | मुख्य कांट्रेब से अनायास शुरू कर दिया जाता है।

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

यह भी ध्यान रखें कि आप संभवतः /etc/cron.d/ में एक क्रेस्टैब टुकड़ा रख सकते हैं

जैसा कि आप देख सकते हैं कि इस पर्यावरण के बारे में कुछ विशेष नहीं है। कम से कम डेबियन / उबंटू पर यह सब रूट अकाउंट के रूप में चलाया जाता है।

जब मैं स्क्रिप्ट के बहुत शुरुआत में क्रोन स्क्रिप्ट लिखता हूं तो मैं हमेशा अपने पैट और अन्य पर्यावरण चर का उपयोग करता हूं, तो मैं निश्चित हो सकता हूं कि यह किसी भी वातावरण में सही ढंग से काम करेगा।


6

एक नियमित सिस्टम-वाइड क्रॉस्टैब एक विशिष्ट उपयोगकर्ता का कॉन्टैब है और इसका उपयोगकर्ता नाम फ़ील्ड है, जैसा कि इसके द्वारा उपयोग किया जाता है /etc/crontab

/etc/cron.*(प्रति घंटा, दैनिक, साप्ताहिक, मासिक) लिपियों का उपयोग करना एक क्लीनर और आसान तरीका है (सामान्य वाक्यविन्यास त्रुटियों को रोकता है) rootउपयोगकर्ता के लिए कॉन्टैब कॉन्फ़िगर करने का और यह run-partsएक निर्देशिका में स्क्रिप्ट या प्रोग्राम चलाता है। ये सभी नियम अभी भी डिफ़ॉल्ट रूप से सिस्टम-वाइड क्रॉस्टैब में परिभाषित हैं ( /etc/crontab), तो यह एक ही बात है।

जब क्रोन नौकरियों द्वारा नियंत्रित किया जाता है run-parts, डिबग करना आसान होता है, जैसा कि आप बस यह परख सकते हैं कि कौन सी स्क्रिप्ट वास्तव में चलेंगी (उन्हें अभी तक चलाए बिना:

sudo run-parts --report --test /etc/cron.daily

3

मेरा पहला जंगली अनुमान आपके गृह चर की जाँच करेगा।

मेरे सेंटोस सिस्टम पर, आदमी 5 crontab कहते हैं:

कई पर्यावरण चर स्वचालित रूप से क्रोन (8) डेमन द्वारा स्थापित किए जाते हैं। शेल / बिन / श के लिए सेट किया गया है, और LOGNAME और HOME को क्रेस्टब के मालिक के / etc / passwd लाइन से सेट किया गया है।

इसलिए, यदि आपने अन्यथा निर्दिष्ट नहीं किया है, तो रूट का क्रेस्टैब घर के लिए / रूट का उपयोग करेगा। लेकिन / etc / crontab में (जो कि /etc/cron.hourly रन-पार्ट्स के माध्यम से चलाया जाता है), HOME को / (/ बिन / शश के बजाय / बिन / बाश में सेट किया जाता है)।

मैं svnsync के बारे में नहीं जानता, लेकिन तोड़फोड़ में एक। / / .Subversion / निर्देशिका का उपयोग होता है, ताकि वह घर पर निर्भर रह सके।


3

मेरे RHEL 5.1 सिस्टम पर, PATH पर्यावरण चर / etc / crontab से सेट किया गया है। सभी चीजें जो शीर्ष पर होती हैं, वह सामान है जो पर्यावरण में खिलाया जाता है।

यदि आप क्रोन को फिर से शुरू करते हैं, तो पहली बार यह (यदि /etc/crontabया तो /var/spool/cron/$USER) चलता है, तो यह इसे / var / log / cron में नोट कर देगा। अन्यथा यह सिर्फ नोट करेगा कि cron.hourly भाग गया

मेरा कॉन्ट्राब निम्न पर सेट है:

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

आप जो कुछ कर सकते हैं, उसे निम्नलिखित में करें जैसे /etc/cron.hourly:

env > /tmp/cron.env

फिर फ़ाइल का निरीक्षण करें जब यह चारों ओर आता है, और पर्यावरण को ठीक से सेट करने के लिए या तो अपनी स्क्रिप्ट (यदि आप कर सकते हैं) को संशोधित करें, या एक छोटा आवरण स्क्रिप्ट लिखें, जिसे आपका क्रेस्टब कॉल करेगा।


2

/var/log/messages (या आपके डिस्ट्रो के समतुल्य) आपको यह बताना चाहिए कि किस कमांड को कब और किस यूजर ने चलाया था।


2

कभी यह न समझें कि वातावरण में कुछ है। हमेशा डिफेंसिवली कोड। आपके पास एक पूरी फ़ाइल है, जो भी पर्यावरण सेट अप करना चाहते हैं, उसमें सामान रखें। इसका इस्तेमाल करें।


2

ज्यादा पोर्टेबिलिटी नहीं है, पिछली बार जब मैंने चेक किया था (डेबियन में) तो क्रोन.हॉरली (और अन्य) में सामान डालने की सिफारिश की गई थी और अगर आप अपने सामान के साथ पैकेज बनाना चाहते थे तो सीधे क्रॉस्टैब में नहीं।

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