2011-03-30 9 views
7

मैं एक bash स्क्रिप्ट foo.sh/etc/cron.daily निर्देशिका में स्थित है, 700 chmoded, जड़ के स्वामित्व, जड़ उपयोगकर्ता के लिए crontab सूची (crontab अपरिवर्तित है - एल) मूल डेबियन स्थापना से। मैंने crontab -l और/या crontab -e की तुलना में क्रोनबॉज को एक और तरीके से चलाया (उदाहरण के लिए मैंने विशिष्ट डेबियन के मामले में सलाह के अनुसार /etc/init.d/cron के साथ क्रॉन डिमन को पुनरारंभ नहीं किया था)। एक परीक्षण नौकरी फ़ाइल के बावजूद इसी तरह की स्थितियों के तहत चल रहा है। स्क्रिप्ट को डीबग किया गया है और त्रुटियों को वापस किए बिना एक स्टैंडअलोन कार्य के रूप में चलाया जा सकता है। मैंने लॉग (/ var/log/syslog) भी चेक किया है और वहां कुछ भी गलत नहीं है।linux डेबियन crontab नौकरी निष्पादित नहीं

लेकिन: यह विशेष नौकरी बिल्कुल निष्पादित नहीं है।

उत्तर

13

ओह। मुझे लगता है कि "क्यों" या कम से कम, "कैसे":

केवल ".sh" एक्सटेंशन के बिना नौकरी फ़ाइल नाम का नाम बदलकर उस समस्या को हल किया गया।

मैंने सोचा कि यह एक डेबियन की बग थी लेकिन यह नीचे दिए गए अन्य उत्तरों में वर्णित नहीं है।

समाधान: जैसा कि इसके नाम

+1

यह डेबियन के लिए विशिष्ट है। जहां तक ​​वे चिंतित हैं, यह एक बग नहीं है। –

+1

@ gms8994: thx, लेकिन मुझे जॉब फ़ाइल नामों के बारे में इस बिंदु को कहीं भी नहीं मिला। मैंने इसे उद्देश्य पर पाया, डिचोटोमियल परीक्षण किया। – hornetbzz

+2

मुझे यह वही तरीका मिला; अधिक जानकारी के लिए [मेरा प्रश्न] देखें (http://serverfault.com/questions/99584/not-all-cron-jobs-in-etc-cron- दैनिक-are-running)। –

8

/etc/cron.daily लिपियों रन भागों (आदमी को देखने के 8 रन भागों) द्वारा क्रियान्वित कर रहे से सभी . या + पात्रों को निकाल कर अपनी स्क्रिप्ट नाम बदलें।

वहाँ आप मैनपेज से एक स्निप साथ जाना:

तो न --lsbsysinit विकल्प है और न ही --regex विकल्प दिया जाता है तो नाम ऊपरी और लोअर केस अक्षरों से बना होता है चाहिए , अंक, अंडरस्कोर, और हाइफ़न।

से/etc/crontab आपको लगता है कि दैनिक क्रॉन नौकरियों के साथ चलाए जा रहे हैं देख सकते हैं:

25 6 * * * root test -x /usr/sbin/anacron || (cd/&& run-parts --report /etc/cron.daily) 

डेबियन anacron उपयोग नहीं करता है और वहाँ कोई --lsbsysinit विकल्प रन भागों के लिए उल्लेख किया है (है उस मामले में '।' एलएसबी पदानुक्रमित और आरक्षित नेमस्पेस के अनुसार क्रॉन स्क्रिप्ट फ़ाइल नाम में स्वीकार किया जाएगा)

वैसे भी, यह सुनिश्चित करने के लिए कि क्रॉन आपकी स्क्रिप्ट चलाएगा, आप हमेशा रन-पार्ट्स चला सकते हैं और जांच सकते हैं कि आपकी स्क्रिप्ट है रन-पार्ट्स आउटपुट में सूचीबद्ध:

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

या

run-parts --list /etc/cron.daily 

मुझे आशा है कि मेरी टिप्पणी आप समझते हैं कि असली समस्या थी मदद करता है।

+0

हां यह मुझे cronjob पृष्ठभूमि को और समझने में मदद करता है। मुझे इन बिंदुओं के बारे में पता नहीं था। thx + 1 pt। – hornetbzz

+0

महान उत्तर - आपने मुझे कुछ समय डिबगिंग बचाई है। –

+0

भले ही आपने '--lsbsysinit' का उपयोग किया हो, फिर भी भाग-भाग अभी भी 'foo.sh' स्वीकार नहीं करेंगे। हालांकि यह 'foo.-sh' स्वीकार करेगा। इसे इस रेगेक्स से मेल खाना चाहिए: '^ _? ([A-z0-9 _।] + -) + [a-z0-9] + $' – wisbucky

0

पहले दिए गए सभी उत्तर प्रश्न के लिए अच्छे और स्वीकार्य हैं। हालांकि, मुझे विश्वास है कि मुझे यह स्पष्ट करने के लिए भी अपना मुद्दा जोड़ना चाहिए कि डेबियन लिनक्स ओएस क्रॉन जॉब फ़ाइल नामों का समर्थन नहीं करता है जिसमें . या + वर्ण शामिल हैं। Debian Policy Manual में relevant section देखें।

तो यह सिर्फ भ्रम से बचने के लिए है, कि यह एक बग नहीं है। इस तरह डेबियन काम करता है।

+0

हाय स्लगस्टर, प्रयास संपादन के लिए धन्यवाद। यह वास्तव में मेरे लिए कोई फर्क नहीं पड़ता कि इसे 'अवधि' या 'डॉट' या कुछ भी नहीं कहा जाता है। मेरे लिए, इसका मतलब है। अब यह संकेत पढ़कर स्पष्ट है। – miklosq