क्रोन त्रुटियों को कहाँ लॉग किया जाता है?


170

यदि मैं cronगलत तरीके से सेटअप करता हूं तो वे चुपचाप विफल हो जाते हैं। मुझे यह समझने के लिए कि मुझे क्या त्रुटि लॉग की तलाश करनी चाहिए, क्या गलत हुआ?

जवाबों:


106

के रूप में अन्य लोगों ने बताया है, cronआप किसी भी प्रोग्राम इसे चलाता के उत्पादन में ईमेल करेंगे (यदि कोई उत्पादन होता है)। इसलिए, यदि आपको कोई आउटपुट नहीं मिलता है, तो मूल रूप से तीन संभावनाएँ हैं:

  1. crond प्रोग्राम चलाने या ईमेल भेजने के लिए एक शेल भी शुरू नहीं किया जा सका
  2. crond आउटपुट मेल करने में समस्याएं थीं, या मेल खो गया था।
  3. कार्यक्रम में कोई आउटपुट नहीं आया (त्रुटि संदेशों सहित)

केस 1. बहुत संभावना नहीं है, लेकिन क्रोन लॉग में कुछ लिखा जाना चाहिए था। क्रोन की अपनी आरक्षित syslog सुविधा है, इसलिए आपको यह देखने के लिए /etc/syslog.conf(या आपके distro में समतुल्य फ़ाइल) में यह देखने के लिए होना चाहिए कि सुविधा के संदेश कहाँ भेजे गए cronहैं। लोकप्रिय स्थलों में शामिल हैं /var/log/cron, /var/log/messagesऔर /var/log/syslog

मामले में 2., आपको मेलर डेमन लॉग्स का निरीक्षण करना चाहिए: क्रोन डेमॉन के संदेश आमतौर पर उसी रूप में दिखाई देते हैं root@yourhost। आप MAILTO=...क्रोनैब फाइल में एक लाइन का उपयोग क्रोन ईमेल को एक विशिष्ट पते पर भेजने के लिए कर सकते हैं, जिससे मेलर डेमन लॉग को पकड़ना आसान हो जाए। उदाहरण के लिए:

MAILTO=my.offsite.email@example.org
00 15 * * *  echo "Just testing if crond sends email"

मामले में 3., आप परीक्षण कर सकते हैं कि क्या कार्यक्रम वास्तव में किसी अन्य कमांड को जोड़कर चलाया गया था जिसका प्रभाव आप आसानी से जांच सकते हैं: उदाहरण के लिए,

00 15 * * * /a/command; touch /tmp/a_command_has_run

तो आप देख सकते हैं कि crondक्या वास्तव में कुछ समय के माइम को देखकर चलाया गया है /tmp/a_command_has_run


3
क्या ये "ईमेल" एक फ़ाइल में भी जाते हैं? मैं साझा वेब होस्टिंग का उपयोग कर रहा हूं और मुझे नहीं लगता कि वे मुझे ईमेल करना जानते हैं।
नाथन लॉन्ग

3
मैं अगर आदेश भी चल रहा है की जाँच करने के लिए 3 मामले में सलाह की सराहना करते हैं। मेरे मामले में, क्रोन अपना काम नहीं कर रहा था क्योंकि मैंने हाल ही में सर्वर का टाइमज़ोन बदल दिया था और क्रोन सर्वर को पुनरारंभ करने की आवश्यकता थी, ताकि यह उचित टाइमज़ोन में क्रोन के समय का मूल्यांकन करे।
नाथन

1
आपके मेल ट्रांसफर एजेंट के आधार पर, आप dead.letterरूट या संबंधित उपयोगकर्ता होम निर्देशिका में एक फ़ाइल में बिना मेल के मिल सकते हैं ।
डारियो सीडल

43

आप लॉग फ़ाइल में हमेशा नौकरी का आउटपुट भेज सकते हैं:

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

ध्यान रखें कि यह पहले से उल्लिखित मेल व्यवहार को सुपरसीड करेगा, क्योंकि क्रोनल्ड को नौकरी से कोई आउटपुट नहीं मिलेगा। यदि आप उस व्यवहार को रखना चाहते हैं तो आपको टी (1) में देखना चाहिए।


9
के >>बजाय का उपयोग क्यों नहीं करते हैं >, इसलिए आप हर बार लॉग फ़ाइल को अधिलेखित नहीं करते हैं?
क्रिस

ज़रूर! किसी भी प्रकार का I / O पुनर्निर्देशन करेगा, भले | /usr/bin/loggerही आप चाहें, चतुराई से स्टीफन द्वारा सुझाए गए। अपना जहर चुनें: tldp.org/LDP/abs/html/io-redirection.html
codehead

cron ने इस लॉग फ़ाइल myjob.logको उम्मीद के मुताबिक 0 आकार के साथ बनाया , लेकिन यह किसी अन्य फ़ाइल में लॉग इन हुई, मैं इस सेटिंग को कहां बदल सकता हूं?
लेखाकार م

42

यदि आप मेल नहीं देख रहे हैं, तो आप उन त्रुटियों के साथ रूट @ yourcompany को स्पैमिंग कर सकते हैं जो निगरानी के लिए उस खाते का उपयोग करने वाले लोगों के लिए काफी कष्टप्रद हो सकते हैं। इसके बजाय Syslog को आउटपुट भेजने का प्रयास करें:

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

फिर, क्रोनजॉब को चलाने के लिए प्रतीक्षा करें और / var / log / संदेश (या कुछ सिस्टम पर /var/log/user.log) में त्रुटि की तलाश करें।

यह त्रुटि संदेशों के लिए बहुत अच्छा काम करता है जो केवल 1-2 लाइनें लंबी होती हैं, जैसे कि "yourcronjob: कमांड नहीं मिली"। यह आपके मौजूदा syslog इंफ्रास्ट्रक्चर (Logrotation, Central syslog, Splunk, आदि) का भी उपयोग करता है। यह ईमेल स्पैम को जड़ से कम करता है।

यह एक अच्छा समाधान नहीं हो सकता है यदि आपका क्रोनजोब आउटपुट की सैकड़ों लाइनें उत्पन्न करता है।


8

डिफ़ॉल्ट क्रोन कॉन्फ़िगरेशन आपको आपके प्रोग्राम के आउटपुट के साथ एक मेल भेजेगा। यदि यह विफल रहता है, तो आप अपने विफल प्रोग्राम को शेल स्क्रिप्ट में लपेटने का प्रयास कर सकते हैं जो यह सुनिश्चित करता है कि प्रोग्राम विफल नहीं होता है, और आप आउटपुट को लॉग इन कर सकते हैं।

यह कुछ क्रोन कार्यान्वयन पर एक विन्यास योग्य सेटिंग है।


7

crondजब नौकरी या तो चलने में विफल हो या जब नौकरी नॉनवेज एग्जिट कोड लौटाए तो आपको ईमेल से सूचना मिलनी चाहिए । टाइप करने का प्रयास करें:

$ mailx

कमांड प्रॉम्प्ट पर।

mailx(1)अधिकांश हर Unixlike प्रणाली पर मूल मेल पढ़ने का कार्यक्रम है। यह आधुनिक मानकों द्वारा बहुत ही आदिम है, लेकिन आप हमेशा उपलब्ध होने के लिए इस पर बहुत अधिक भरोसा कर सकते हैं। अन्य, बेहतर मेल एजेंट उपलब्ध हो सकते हैं, लेकिन उनमें से पर्याप्त हैं जिन्हें आप कभी नहीं जानते हैं कि आप किसी यादृच्छिक मशीन पर स्थापित हैं जिसे आप उपयोग कर रहे हैं।

ध्यान दें कि जब तक आपने अपने सिस्टम को इंटरनेट ईमेल सर्वर के रूप में कॉन्फ़िगर नहीं किया है, यह मेल सबसिस्टम केवल मशीन के भीतर उपयोग किया जाता है। आप मशीन पर अन्य उपयोगकर्ताओं से ईमेल भेज सकते हैं और प्राप्त कर सकते हैं, लेकिन आप दुनिया को ईमेल भेजने में सक्षम नहीं हो सकते हैं, और बाहरी दुनिया से ईमेल निश्चित रूप से आपके मशीन पर नहीं आ पाएंगे।


5

क्रॉन बुनियादी जानकारी को लॉग करता है /var/log/messages, लेकिन किसी भी प्रोग्राम आउटपुट को इनवॉइस करने वाले उपयोगकर्ता को मेल करता है।


/var/log/messagesमेरे उबंटू सर्वर ( 4.4.0-128-generic #154-Ubuntu SMP) पर कोई नहीं है । कोई विचार क्यों? Llva में कुछ क्रोन नौकरियों rootको महीनों (जैसे apt autoremove) के लिए परिभाषित किया गया था, लेकिन कोई भी ऐसा नहीं किया गया है।
डेन डैस्कलेस्क्यू

2

मैं कुछ साल पहले इसी समस्या का सामना कर रहा था और इस हाल ही में रिकार्डो द्वारा उपरोक्त मामलों के समाधान के लिए आया था। ईमेल की कमी का पता लगाना कठिन है (जैसा कि आपने बताया) और आप निश्चित रूप से अपने रूट @ yourcompany ईमेल को स्पैम नहीं करना चाहते हैं। यदि रुचि के लिए बाहर की जाँच करें । यह उपकरण उपरोक्त मामलों को हल करने के लिए लगता है। उपयोग करने के लिए बहुत आसान लगता है - बस कोड को जोड़ने के लिए उपकरण आपको अपने क्रोनजॉब में देता है। यदि आपकी नौकरी एक निर्दिष्ट आंतरिक पर चलने में विफल रहती है, तो आपको सतर्क कर दिया जाएगा। यदि आप नौकरी फिर से शुरू करते हैं तो आप भी सतर्क हो जाएंगे।


1

मैं उपयोग करता हूं vixie-cron, इसलिए मुझे नहीं पता कि यह सब कुछ लागू होता है या नहीं। लेकिन मेरे पास एक dead.letterफाइल है जिसमें नौकरी के सभी आउटपुट हैं।

मेरे /root/फ़ोल्डर में मेरे पास crons.cronजो मैं चलाकर अपने crontab के रूप में सेट करता हूं crontab /root/crons.crondead.letterके /root/रूप में अच्छी तरह से बनाया जाएगा ।

संपादित करें मैं सिर्फ Google'd dead.letter, और यह एक अविश्वसनीय मेल है। इसका जाहिरा तौर पर क्रोन से कोई लेना-देना नहीं है। यदि आपके पास मेल नहीं है तो सही तरीके से (मेरी तरह), आपके पास फ़ाइल होगी।


0

Newbies के लिए, यह डिबग करने के लिए एक दर्द हो सकता है। सुनिश्चित करें कि मिनट और घंटे के मूल्यों को इंटरचेंज न करें। मिनट पहले आता है, फिर घंटा। जब आप प्रत्येक के लिए 12 से कम मूल्यों की आपूर्ति करते हैं, तो यह उन्हें स्वीकार करेगा लेकिन उम्मीद के मुताबिक या बिल्कुल भी काम नहीं कर सकता है।


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