Crontab /etc/cron.d में चलते हुए कभी नहीं


32

यहाँ मैं डेबियन जेसी पर क्या किया है:

  • के माध्यम से क्रॉन स्थापित करें apt-get install cron
  • में एक backup_crontabफ़ाइल रखो/etc/cron.d/

हालांकि कार्य कभी नहीं चल रहा है।

यहाँ कुछ आउटपुट दिए गए हैं:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

क्या किसी विशेष क्रॉस्टैब को सक्रिय करने या अपने आप में क्रोन "सेवा" को सक्रिय करने के लिए कुछ करना है?


4
यदि यह चल रहा है और एक त्रुटि के साथ विफल हो रहा है तो आपको यह देखने को नहीं मिलेगा क्योंकि आप सभी आउटपुट को / dev / null में रीडायरेक्ट कर रहे हैं? :)
tink

@tink आउटपुट को फ़ाइल के अंत में जोड़ना संभव है?
जीवन जूल

2
यकीन है; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
tink

@ जीवन, बस एक छोटा सा नोट: आउटपुट के मामले में ls /etc/cron.dबराबर है cd /etc/cron.d && ls। एकमात्र अंतर यह है कि कार्यशील निर्देशिका नहीं बदलेगी।
चपिन

जवाबों:


49

फाइलों को /etc/cron.dउस उपयोगकर्ता को भी सूचीबद्ध करने की आवश्यकता है जिसे नौकरी के तहत चलाया जाना है।

अर्थात

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

आपको अनुमतियाँ और स्वामी भी सुनिश्चित करने चाहिए: समूह सही तरीके से सेट किए गए हैं ( -rw-r--r--और स्वामित्व में हैं root:root)


16
crontab -lक्रोन प्रविष्टियों पर रिपोर्ट /var/spool/cron/crontabs/- यानी प्रति उपयोगकर्ता crontabs। /etc/cron.dफाइलें सिस्टम क्रॉस्टैब्स हैं और इनके द्वारा रिपोर्ट नहीं की गई हैं crontab -l
स्टीफन हैरिस

5
वास्तव में मैंने उल्लेख किया है कि यह काम नहीं कर रहा था, लेकिन मुझे बस एहसास हुआ कि यह rootफाइल में जोड़ने के बाद है - बस crontab -lइसका उल्लेख नहीं किया, जैसा कि आपने बताया कि क्यों - आपकी मदद के लिए धन्यवाद
Jivan

9
ऐसा लगता है कि फ़ाइल नाम की भी भूमिका है। मेरे मामले में मैंने etc/cron.dनाम के बीच में एक डॉट के साथ एक फ़ाइल को जोड़ा था और जब तक मैंने इसका नाम नहीं लिया, तब तक नौकरी को कभी भी निष्पादित नहीं किया गया था
pic

20
यहाँ एक ही समस्या है, डैश "-" फ़ाइल नाम में, उन्हें "_" को अंडरस्कोर करने से समस्या हल हो गई, नौकरियां तुरंत चली गईं।
रॉब

1
मैं भी एक पानी का छींटा था ... क्या .... क्यों ?! वैसे भी, धन्यवाद @Rob
निकोले दिमित्रोव

8

एक और बात मैंने देखी है कि फ़ाइल में /etc/cron.dएक्सटेंशन नहीं हो सकता। मेरे विशेष मामले में, मेरे पास एक प्रतीकात्मक लिंक था:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

फ़ाइल नाम प्रतिबंध रन-पार्ट मैन पेज पर प्रलेखित हैं: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html , कोई फ़ाइल प्रारूप को ओवरराइड करने के लिए --regex विकल्प पारित कर सकता है।

डिफ़ॉल्ट क्रोन व्यवहार हालांकि बिना एक्सटेंशन के रहा, इसके अंतर्गत टिप्पणियां देखें: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022


यार, तुमने मेरा दिन बचा लिया!
एल्बोलेयर

2
यह उबंटू पर (शायद सभी डेबियन-व्युत्पन्न डिस्ट्रोस पर) सही है। अमेज़ॅन लिनक्स पर (और शायद सभी रेडहैट-व्युत्पन्न डिस्ट्रोस पर), आप फ़ाइल नाम में एक डॉट रख सकते हैं। शुक्रिया यूनिक्स एस.ई.
Law29

मैंने सिर्फ एक शुद्ध डेबियन की जाँच की, और डॉट्स वहां भी काम नहीं करते हैं। डैश काम करते हैं (ऊपर एक टिप्पणी के विपरीत)।
नियम २

4

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


2

यदि आप इस कंप्यूटर के एकमात्र उपयोगकर्ता हैं, तो आप बस उपयोग करना चाह सकते हैं crontab -e। पहली बार कमांड चलाने पर आपको एक संपादक का चयन करने के लिए प्रेरित किया जाएगा। फिर आप इसे इसमें जोड़ सकते हैं:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

यदि आप एक सामान्य उपयोगकर्ता खाते में बदलते हैं, तो आपको उपयोग करने की आवश्यकता होगी sudo crontab -e उन लिपियों को कॉन्फ़िगर करने के करना जिन्हें आप शेड्यूल करना चाहते हैं root

crontab -lकेवल वर्तमान crontab प्रदर्शित करता है, एक बार जब आप एक का उपयोग कर सेट करें crontab -e। यदि आपके पास /etc/cron.d/ में क्रोन फ़ाइल है , तो इसे प्रदर्शित नहीं किया जाएगाcrontab -l

आपको यह भी सत्यापित करना होगा कि आपकी स्क्रिप्ट के साथ निष्पादन योग्य है chmod +x /backup.sh:।


1
धन्यवाद - इस मामले में crontab के संदर्भ में सेट किया गया है, Dockerfileइसलिए मैं वास्तव में ऐसा नहीं कर सकता crontab -e- लेकिन यह वैसे भी एक उपयोगी जानकारी है
Jivan

2

क्रोन से * बियान डिस्ट्रोस (जैसे रास्पियन) के लिए आपको -lक्रोन डेमॉन के पैरामीटर को सक्षम करने की आवश्यकता है । यह सलाह दी जाती है कि /etc/default/cronकॉन्फ़िगर फ़ाइल का उपयोग करना , सक्षम करना EXTRA_OPTS


यह अस्वीकार कर दिया गया था, लेकिन यह कुछ मामलों में सही है, हालांकि समझाया नहीं गया है। डेबियन-आधारित डिस्ट्रोस पर -lक्रोन डेमॉन का विकल्प /etc/cron.dनिर्देशिका में फ़ाइल नामों के एक विस्तारित सेट को अधिकृत करता है , इसलिए यदि फ़ाइल को चुपचाप अनदेखा किया जा रहा है क्योंकि इसमें एक डॉट है, तो या तो "-l" या "रिमूविंग डॉट" जोड़ना होगा। समस्या को ठीक करेगा।
Law29

1

अपने संस्करण की जाँच करें cron

ऐसा लगता है कि यदि आप डिलन के क्रोन का उपयोग कर रहे हैं, तो आपको एक /etc/cron.dप्रविष्टि में उपयोगकर्ता की आवश्यकता नहीं है ।

मैंने अपने शेष बालों को बाहर निकालने के बाद यह पता लगाया।

मेरे पास बहुत सी प्रविष्टियाँ हैं जिन्हें /etc/cron.dविभिन्न संस्थापनों द्वारा गिरा दिया गया है। कुछ जांच के बाद, मैंने पाया कि उनमें से एक काम कर रहा था। यह उपयोगकर्ता नहीं था। इसलिए मैंने उपयोगकर्ता को दूसरों से बाहर निकाल दिया। और वे काम करने लगे।

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