यदि मैं cron
गलत तरीके से सेटअप करता हूं तो वे चुपचाप विफल हो जाते हैं। मुझे यह समझने के लिए कि मुझे क्या त्रुटि लॉग की तलाश करनी चाहिए, क्या गलत हुआ?
यदि मैं cron
गलत तरीके से सेटअप करता हूं तो वे चुपचाप विफल हो जाते हैं। मुझे यह समझने के लिए कि मुझे क्या त्रुटि लॉग की तलाश करनी चाहिए, क्या गलत हुआ?
जवाबों:
के रूप में अन्य लोगों ने बताया है, cron
आप किसी भी प्रोग्राम इसे चलाता के उत्पादन में ईमेल करेंगे (यदि कोई उत्पादन होता है)। इसलिए, यदि आपको कोई आउटपुट नहीं मिलता है, तो मूल रूप से तीन संभावनाएँ हैं:
crond
प्रोग्राम चलाने या ईमेल भेजने के लिए एक शेल भी शुरू नहीं किया जा सकाcrond
आउटपुट मेल करने में समस्याएं थीं, या मेल खो गया था।केस 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
।
dead.letter
रूट या संबंधित उपयोगकर्ता होम निर्देशिका में एक फ़ाइल में बिना मेल के मिल सकते हैं ।
आप लॉग फ़ाइल में हमेशा नौकरी का आउटपुट भेज सकते हैं:
0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1
ध्यान रखें कि यह पहले से उल्लिखित मेल व्यवहार को सुपरसीड करेगा, क्योंकि क्रोनल्ड को नौकरी से कोई आउटपुट नहीं मिलेगा। यदि आप उस व्यवहार को रखना चाहते हैं तो आपको टी (1) में देखना चाहिए।
>>
बजाय का उपयोग क्यों नहीं करते हैं >
, इसलिए आप हर बार लॉग फ़ाइल को अधिलेखित नहीं करते हैं?
| /usr/bin/logger
ही आप चाहें, चतुराई से स्टीफन द्वारा सुझाए गए। अपना जहर चुनें: tldp.org/LDP/abs/html/io-redirection.html
myjob.log
को उम्मीद के मुताबिक 0 आकार के साथ बनाया , लेकिन यह किसी अन्य फ़ाइल में लॉग इन हुई, मैं इस सेटिंग को कहां बदल सकता हूं?
यदि आप मेल नहीं देख रहे हैं, तो आप उन त्रुटियों के साथ रूट @ 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, आदि) का भी उपयोग करता है। यह ईमेल स्पैम को जड़ से कम करता है।
यह एक अच्छा समाधान नहीं हो सकता है यदि आपका क्रोनजोब आउटपुट की सैकड़ों लाइनें उत्पन्न करता है।
डिफ़ॉल्ट क्रोन कॉन्फ़िगरेशन आपको आपके प्रोग्राम के आउटपुट के साथ एक मेल भेजेगा। यदि यह विफल रहता है, तो आप अपने विफल प्रोग्राम को शेल स्क्रिप्ट में लपेटने का प्रयास कर सकते हैं जो यह सुनिश्चित करता है कि प्रोग्राम विफल नहीं होता है, और आप आउटपुट को लॉग इन कर सकते हैं।
यह कुछ क्रोन कार्यान्वयन पर एक विन्यास योग्य सेटिंग है।
crond
जब नौकरी या तो चलने में विफल हो या जब नौकरी नॉनवेज एग्जिट कोड लौटाए तो आपको ईमेल से सूचना मिलनी चाहिए । टाइप करने का प्रयास करें:
$ mailx
कमांड प्रॉम्प्ट पर।
mailx(1)
अधिकांश हर Unixlike प्रणाली पर मूल मेल पढ़ने का कार्यक्रम है। यह आधुनिक मानकों द्वारा बहुत ही आदिम है, लेकिन आप हमेशा उपलब्ध होने के लिए इस पर बहुत अधिक भरोसा कर सकते हैं। अन्य, बेहतर मेल एजेंट उपलब्ध हो सकते हैं, लेकिन उनमें से पर्याप्त हैं जिन्हें आप कभी नहीं जानते हैं कि आप किसी यादृच्छिक मशीन पर स्थापित हैं जिसे आप उपयोग कर रहे हैं।
ध्यान दें कि जब तक आपने अपने सिस्टम को इंटरनेट ईमेल सर्वर के रूप में कॉन्फ़िगर नहीं किया है, यह मेल सबसिस्टम केवल मशीन के भीतर उपयोग किया जाता है। आप मशीन पर अन्य उपयोगकर्ताओं से ईमेल भेज सकते हैं और प्राप्त कर सकते हैं, लेकिन आप दुनिया को ईमेल भेजने में सक्षम नहीं हो सकते हैं, और बाहरी दुनिया से ईमेल निश्चित रूप से आपके मशीन पर नहीं आ पाएंगे।
क्रॉन बुनियादी जानकारी को लॉग करता है /var/log/messages
, लेकिन किसी भी प्रोग्राम आउटपुट को इनवॉइस करने वाले उपयोगकर्ता को मेल करता है।
/var/log/messages
मेरे उबंटू सर्वर ( 4.4.0-128-generic #154-Ubuntu SMP
) पर कोई नहीं है । कोई विचार क्यों? Llva में कुछ क्रोन नौकरियों root
को महीनों (जैसे apt autoremove
) के लिए परिभाषित किया गया था, लेकिन कोई भी ऐसा नहीं किया गया है।
मैं कुछ साल पहले इसी समस्या का सामना कर रहा था और इस हाल ही में रिकार्डो द्वारा उपरोक्त मामलों के समाधान के लिए आया था। ईमेल की कमी का पता लगाना कठिन है (जैसा कि आपने बताया) और आप निश्चित रूप से अपने रूट @ yourcompany ईमेल को स्पैम नहीं करना चाहते हैं। यदि रुचि के लिए बाहर की जाँच करें । । यह उपकरण उपरोक्त मामलों को हल करने के लिए लगता है। उपयोग करने के लिए बहुत आसान लगता है - बस कोड को जोड़ने के लिए उपकरण आपको अपने क्रोनजॉब में देता है। यदि आपकी नौकरी एक निर्दिष्ट आंतरिक पर चलने में विफल रहती है, तो आपको सतर्क कर दिया जाएगा। यदि आप नौकरी फिर से शुरू करते हैं तो आप भी सतर्क हो जाएंगे।
मैं उपयोग करता हूं vixie-cron
, इसलिए मुझे नहीं पता कि यह सब कुछ लागू होता है या नहीं। लेकिन मेरे पास एक dead.letter
फाइल है जिसमें नौकरी के सभी आउटपुट हैं।
मेरे /root/
फ़ोल्डर में मेरे पास crons.cron
जो मैं चलाकर अपने crontab के रूप में सेट करता हूं crontab /root/crons.cron
। dead.letter
के /root/
रूप में अच्छी तरह से बनाया जाएगा ।
संपादित करें
मैं सिर्फ Google'd dead.letter
, और यह एक अविश्वसनीय मेल है। इसका जाहिरा तौर पर क्रोन से कोई लेना-देना नहीं है। यदि आपके पास मेल नहीं है तो सही तरीके से (मेरी तरह), आपके पास फ़ाइल होगी।
Newbies के लिए, यह डिबग करने के लिए एक दर्द हो सकता है। सुनिश्चित करें कि मिनट और घंटे के मूल्यों को इंटरचेंज न करें। मिनट पहले आता है, फिर घंटा। जब आप प्रत्येक के लिए 12 से कम मूल्यों की आपूर्ति करते हैं, तो यह उन्हें स्वीकार करेगा लेकिन उम्मीद के मुताबिक या बिल्कुल भी काम नहीं कर सकता है।