मेरा cron.d प्रति मिनट नौकरी क्यों नहीं चलता है?


33

मैंने डार्ट्स के एक झुंड को फेंका है जो हर मिनट को अंजाम देने के लिए मेरी एक पाइथन लिपि प्राप्त करने की कोशिश कर रहा है। इसलिए मैंने सोचा कि मैं इसे "सरलतम बात" कर सकता हूं जो संभवत: प्रति मिनट एक बार काम कर सकता है (मैं डेबियन / परीक्षण चला रहा हूं)।

मैंने इसमें एक सिंगल लाइन फाइल बनाई /etc/cron.d/perminute:

* * * * * /bin/touch /home/me/ding_dong

यह रूट के स्वामित्व में है, और निष्पादन योग्य (निश्चित रूप से उन दोनों में से कोई भी नहीं)। और फिर मैंने किया:

sudo service cron reload

और फिर वापस बैठो ls -ltrऔर फिर से मेरे घर निर्देशिका ( /home/me) में चलना शुरू करें । लेकिन मेरी ding_dong फ़ाइल कभी नहीं दिखाई देती है। मुझे पता है कि अगर मैं ए करता हूं sudo /bin/touch /home/me/ding_dong, तो यह तुरंत दिखाई देता है।

जाहिर है यहां कुछ बेवकूफी याद आ रही है।


3
Cron.d में परिवर्तन लागू करने के लिए क्रोन डेमॉन सेवा को फिर से लोड करना आम तौर पर अनावश्यक है क्योंकि यह वैसे भी हर मिनट नई और अद्यतन फ़ाइलों के लिए निर्देशिका को बचाता है।
जोसिप रोडिन

जवाबों:


45

जब आप /etc/cron.d/या /etc/crontabआप में क्रोन कॉन्फ़िगरेशन जोड़ते हैं, तो उपयोगकर्ता नाम को उस संदर्भ में जोड़ना होगा जिसमें कमांड आपके उदाहरण में चलना चाहिए

* * * * * root /bin/touch /home/me/ding_dong

और मुझ से बस एक संकेत: आपको ls -ltrबार-बार दौड़ना शुरू करने की ज़रूरत नहीं है , बस उपयोग करें watch -n 5 "ls -ltr"और यह कमांड को हर 5 सेकंड (या जो आप चाहते हैं उसके साथ 5 को प्रतिस्थापित करके चलाएंगे)।


9
यह मुझे सही दिशा में जा रहा है। यह एक मुखर क्षण था। मैंने इसे ठीक कर दिया, और अभी भी यह काम नहीं किया। man cronथोड़ा धीमा पढ़ने , और DEBIAN specificवर्गों पर विशेष ध्यान देने के बाद , मैंने देखा कि फाइलों को समूह या अन्य लिखने योग्य नहीं होना चाहिए । जिसे मैंने एक बिंदु पर अपनी हताशा में सक्षम किया था।
ट्रैविस ग्रिग्स

क्या आप केवल स्क्रिप्ट के स्वामी को रूट करने के लिए नहीं बदल सकते थे?
गेरिमिया

इस विशिष्ट रेखा ने मेरी मदद की। से man cron: इसके अलावा, डेबियन में, cron /etc/cron.d निर्देशिका में फ़ाइलों को पढ़ता है। cron फाइलों को /etc/cron.d में उसी तरह से व्यवहार करता है जैसे / etc / crontab फ़ाइल (वे उस फ़ाइल के विशेष प्रारूप का अनुसरण करते हैं, अर्थात वे उपयोगकर्ता फ़ील्ड को शामिल करते हैं )। हालांकि, वे / etc / crontab से स्वतंत्र हैं: वे, उदाहरण के लिए, इससे पर्यावरण चर सेटिंग्स प्राप्त नहीं करते हैं। यह परिवर्तन डेबियन के नीचे DEBIAN विनिर्देश के तहत नोट को देखने के लिए विशिष्ट है।
harperville

आदमी 8 क्रोन (डेबियन पर) यह भी कहता है कि /etc/cron.d/ में फ़ाइलों में केवल अल्फ़ान्यूमेरिक वर्ण हो सकते हैं, '-' और '_'। विशेष रूप से, कोई डॉट्स नहीं।
mpartel

3

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

* * * * * /bin/touch /home/me/ding_dong

जिस तरह से आप कर रहे हैं उसके लिए एक अलग प्रारूप की आवश्यकता होती है और वास्तव में यह एक अच्छा विचार नहीं है। Crontabs के /etc/cron.dपास थोड़ा अलग प्रारूप है, उन्हें चलाने के लिए एक उपयोगकर्ता नाम की आवश्यकता होती है। उदाहरण के लिए:

* * * * * USERNAME /bin/touch /home/me/ding_dong

एक अच्छी चाल (जैसा कि @VogonPoetLaureate द्वारा सुझाया गया है) आपकी क्रोन नौकरियों की मानक त्रुटि को पकड़ने के लिए है जो उन्हें डिबग करने में मदद कर सकती है। उदाहरण के लिए:

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error

6
यह कहने का कोई कारण नहीं है कि cron.d "अच्छा विचार नहीं है"। क्रोन डेमॉन उपयोगकर्ता नाम cron.d stderr आउटपुट को ठीक-ठीक मेल करेगा, और यदि आप इसे किसी अन्य ई-मेल पते पर पुनर्निर्देशित करना चाहते हैं, तो MAILTO चर उपलब्ध है।
जोसिफ रोडिन

@JosipRodin यह उन चीजों के लिए एक अच्छा विचार नहीं है जो जड़ से नहीं चलती हैं और जो आपके द्वारा स्थापित की जाती हैं। यह एक बहुउद्देशीय प्रणाली पर एक sysadmin के लिए समझ में आता है, लेकिन अपनी मशीन पर, अपने कॉन्टैब में सब कुछ होना सरल है, इसलिए crontab -lआपके सभी क्रोन नौकरियों की जांच करने और सूचीबद्ध करने के लिए केवल एक ही स्थान है ।
टेराडन

यह मानता है कि यह वास्तव में सिर्फ एक व्यक्तिगत क्रोन नौकरी है, जिसे ओपी ने वास्तव में स्पष्ट नहीं किया है - आम तौर पर, cron.d के माध्यम से अनप्रोविलेज किए गए उपयोगकर्ता क्रोन नौकरियों के लिए कई अनुप्रयोग हैं, जैसे कि उन सभी को एक जगह पर रखने के बावजूद तथ्य यह है कि आपके पास अच्छी तरह से है अनुक्रमित सेवा उपयोगकर्ता, स्वचालित परिनियोजन आसान है, आदि
जोसिप रोडिन

@JosipRodin बिल्कुल। मैंने एक व्यक्तिगत प्रणाली ग्रहण की क्योंकि i) एंटरप्राइज़ सिस्टम यहाँ विषय से दूर हैं और ii) प्रश्न एक गैर-विशेषज्ञ उपयोगकर्ता का सुझाव दिया है।
टेराडन

ठीक है, मुझे लगता है कि मैं सुपरसर्वर और सर्वरफॉल्ट और यूनिक्स एसई साइटों के बीच आम भ्रम की वजह से नहीं पढ़ता हूं :)
जोसिफ रोडिन

2

यहां एक संभावित गलती यह है कि सिंगल लाइन फाइल कैसे बनाई जाती है। से उबंटू प्रलेखन :

... लाइन में पाँच समय और तारीख के क्षेत्र होते हैं, उसके बाद एक कमांड, उसके बाद एक नया वर्ण होता है

उदाहरण के लिए, निर्माण का यह तरीका काम नहीं करता है:

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.