"(CRON) जानकारी (कोई MTA स्थापित नहीं है, आउटपुट को छोड़ना)" syslog में त्रुटि


198

मेरे पास Ubuntu 12.04.1 LTS की कई सर्वरों की एक नई स्थापना है।

मैंने कोई क्रोन जॉब्स नहीं जोड़ा है या उन सर्वरों पर अपना कॉन्टैब संपादित नहीं किया है, हालांकि, प्रत्येक मशीन के लिए लगभग एक ही समय में, मुझे स्पाइक के समय 75% सीपीयू स्पाइक और मेरे सिसलॉग में निम्न जानकारी मिलती है:

CRON[8380]: (CRON) info (No MTA installed, discarding output)

मेरे पास मोनो-पूर्ण स्थापित है और मैं एक सर्विस स्टैक वेबसर्वर चला रहा हूं।

ऐसा होने से रोकने के लिए मेरे लिए सबसे अच्छा तरीका क्या है? मैं सीपीयू स्पाइक को हटाने में सक्षम होना चाहूंगा।


हर दिन 6:25 पर? वे /etc/cron.daily/ से स्क्रिप्ट हैं। मेरे पास केवल एक ही मेल भेजने की कोशिश है: लोकप्रियता-प्रतियोगिता। अपनी स्क्रिप्ट देखें और देखें कि कौन सी स्क्रिप्ट मेल भेजने की कोशिश कर रही है? इसे कम करना चाहिए। फिर निष्पादन को रोकने के लिए 'chmod 0644 /etc/cron.daily/script-name'।

जवाबों:


173

लिनक्स उपयोगकर्ता को सूचनाएं भेजने के लिए मेल का उपयोग करता है। अधिकांश लिनक्स वितरण में एक मेल सेवा (एक एमटीए सहित) स्थापित है। हालांकि Ubuntu नहीं है।

आप इस समस्या को हल करने के लिए एक मेल सेवा, उदाहरण के लिए पोस्टफ़िक्स स्थापित कर सकते हैं।

sudo apt-get install postfix

या आप इसे अनदेखा कर सकते हैं। मुझे नहीं लगता कि संदेश भेजने में क्रोन की अक्षमता का सीपीयू स्पाइक के साथ कुछ भी लेना देना है (यह अंतर्निहित कार्य से जुड़ा है जो क्रोन चल रहा है)। यह एमटीए स्थापित करने के लिए सबसे सुरक्षित हो सकता है और फिर संदेशों के माध्यम से पढ़ा जा सकता है ( muttयह एक अच्छा सिस्टम मेल रीडर है)।


5
क्या पोस्टफ़िक्स को स्थापित करना अच्छी बात है? किस MTA का उपयोग करना सबसे आसान है?
एंडोलिथ


5
यह इंगित करने योग्य है कि क्रोन के साथ उपयोग के लिए (यदि आप वास्तव में ईमेल को बाहर की ओर नहीं भेजना चाहते हैं) तो स्थापना प्रक्रिया के दौरान आपको केवल स्थानीय उपयोग के लिए कॉन्फ़िगर करने का जवाब देना चाहिए।
स्टीफन

जिस तरह से मैं मेल चेक करना जानता हूं वह (डेबियन) mailद्वारा प्रदान किया गया है mailutils, अगर पोस्टफ़िक्स के लिए एक बेहतर तरीका बनाया गया है?
थोरसुमोनर

79

ऐसा इसलिए होता है क्योंकि आपकी क्रोन नौकरियां आउटपुट का उत्पादन कर रही हैं और फिर क्रोन डेमॉन उस आउटपुट को आपको (यानी रूट) ईमेल करने की कोशिश करता है। यदि आपको उस आउटपुट की आवश्यकता नहीं है, तो इसे हल करने का सबसे आसान तरीका है कि इसे क्रेस्टैब पर छोड़ दें:

sudo crontab -e

और >/dev/null 2>&1हर काम में जोड़ें :

* * * * * yourCommand >/dev/null 2>&1

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

1
ओली, भले ही यह एक पुराना सवाल है, मैं एक ही सटीक मुद्दे का अनुभव कर रहा हूं लेकिन यह रास्पबेरी पीआई पर है। मुझे No MTA installed, discarding outputलॉग में संदेश का गुच्छा दिखाई देता है और मेरा कार्यक्रम अंततः अपने आप ही चलना बंद हो जाता है। मेरा मानना ​​है कि यह सीपीयू स्पाइक के कारण है। ऐसा लगता है कि इस प्रश्न के लिए पोस्ट किए गए सभी उत्तर इसे अनदेखा करते हैं।

4
आउटपुट रखने के लिए, कमांड को स्क्रिप्ट में रखें, और पाइप स्टडआउट और stderr को logger। उदाहरण के लिए, yourCommand >/dev/null 2>&1 | logger -t mycmd। यह आउटपुट को सुरक्षित रखने के लिए syslog में डाल देगा, और MTA शिकायतों को रोक देगा।
CivMeierFan

56

मेरे मामले में, संदेश बैश स्क्रिप्ट के साथ अनुमतियों की समस्या पर इशारा कर रहा था, लेकिन जब तक मैं एमटीए स्थापित नहीं करता, मैं इसे नहीं देख सकता था।

सुझाव के अनुसार मैं भागा:

sudo aptitude install postfix

मैंने सेटअप के दौरान और फिर से क्रॉन जॉब चलाने के बाद "लोकल" चुना:

sudo tail -f /var/mail/<user>

मेरे मामले में मैंने जगह ले ली

<user>

"जड़" के साथ।

मैं तब अनुमतियों से संबंधित त्रुटि आउटपुट देखने में सक्षम था।


3
नौकरी से त्रुटियों को देखने के लिए मेलबॉक्स की जांच करने के लिए अतिरिक्त टिप्पणी के लिए धन्यवाद!
स्टुअर्ट एलन

32

जैसा कि पहले उत्तर में कहा गया है, ऐसा इसलिए होता है क्योंकि आपकी क्रोन नौकरियां आउटपुट का उत्पादन कर रही हैं, और फिर क्रोन डेमॉन उस आउटपुट को आपको ईमेल करने की कोशिश करता है। यदि आप एमटीए स्थापित नहीं करना चाहते (या नहीं कर सकते हैं), लेकिन आप आउटपुट देखना चाहते हैं, तो आप क्रॉन जॉब के आउटपुट को लॉग फाइल में रीडायरेक्ट कर सकते हैं। के साथ अपनी crontab फ़ाइल संपादित करें

crontab -e

(उपयोग करें sudoकि समस्या रूट के क्रॉस्टैब के साथ है) और प्रत्येक कमांड के बाद इस तरह जोड़ें :>> /some/log/file 2>&1

0 3 * * * cmd   >> / कुछ / लॉग / फाइल 2> & 1

यदि एक पंक्ति पर कई कमांड हैं, तो इसके द्वारा अलग किया गया है ;,  &&  या ||, आपको प्रत्येक कमांड के लिए उपरोक्त करना चाहिए, जैसे:

0 3 * * * cmd 1   >> / कुछ / लॉग / फाइल 2> & 1;  cmd 2   >> / कुछ / लॉग / फाइल 2> और 1

या उन्हें समूह, इस तरह:

0 3 * * * ( cmd 1 ;   cmd 2 )   >> / कुछ / लॉग / फाइल 2> & 1

यदि आप stdout को अनदेखा करना चाहते हैं और केवल stderr को कैप्चर करना चाहते हैं, तो इसके बजाय उपयोग करें । जहां भी आप चाहते हैं, लॉग फ़ाइल रखें - आपकी होम निर्देशिका , या यहां तक ​​कि अगर आपको यकीन है कि आपको इसे रखने की आवश्यकता नहीं होगी।> /dev/null 2>> /some/log/file/var/log/tmp

फिर नौकरी चलने के बाद लॉग फाइल को देखें।


28

Crontab में इसे पहली पंक्ति के रूप में जोड़ें:

MAILTO=""

यह क्रोन को ई-मेल भेजने की कोशिश करने से रोकेगा।


4
किसी भी टिप्पणी ( #) के बाद MAILTO=""या यह काम नहीं करेगा
SBF

23

यदि आप MTA (जिसे मुझे वर्तमान में कोई आवश्यकता नहीं है) स्थापित नहीं करना चाहते हैं तो आप लॉग फ़ाइल में क्रोन जॉब के परिणामों को पाइप कर सकते हैं।

sudo crontab -e

तब आपकी क्रोन नौकरी इस तरह दिखेगी।

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

तो आप बस लॉग को पूंछ कर सकते हैं और देख सकते हैं कि क्या हुआ

sudo tail -f -n 50 /var/log/somelogfile.log

यह वह है जो मैं किसी भी सर्वर पर कर रहा हूं जो मुझे उस संदेश को syslog में दिखाई दे रहा है


मैंने ऐसा किया है, लेकिन फ़ाइल में कोई लॉगिंग नहीं जोड़ा गया है।
पीर

क्या आप सुनिश्चित हैं कि क्रॉन जॉब चल रहा है?
एंड्रयू मैकनॉटन

हां, सिस्टम लॉग दिखाता है कि यह शुरू हो रहा है।
पीर

1
फ़ाइल में stderr पर आउटपुट कैप्चर करने के लिए आपको पंक्ति के अंत में '2> & 1' की आवश्यकता होती है।
मैटस्मिथ

15

यह एक पुराना प्रश्न है लेकिन एक अतिरिक्त उत्तर है जो कुछ परिस्थितियों में उपयोगी है।

अपने क्रोन कमांड के आउटपुट को पाइप के माध्यम से loggerताकि वे सिसलॉग में समाप्त हो जाएं।

यह पोस्टफ़िक्स को स्थापित करने से थोड़ा आसान है, और यह इस आउटपुट को आपके अन्य लॉग्स के साथ syslog में डालता है। यह कमांड stdout और stderr को कैप्चर करेगा ताकि आप No MTA installedसंदेश नहीं देखेंगे और आप अपने सभी आउटपुट को syslog में देखेंगे।

उदाहरण क्रोन प्रविष्टि:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

आप अपने टैग mycmdका उपयोग करके लॉग देख सकते हैं :

grep 'mycmd' /var/log/syslog

क्या क्रोन नौकरियों में पाइप काम करते हैं?
CivMeierFan

10

/dev/null 2>&1क्रोन जॉब कमांड को जोड़ने का एक पक्ष प्रभाव यह है कि यह दोनों STDERRऔर STDOUT(मानक त्रुटि और साथ ही आउटपुट) को छोड़ देगा। यदि आप क्रोन का कोई ईमेल नहीं चाहते हैं तो यह ठीक काम करता है। लेकिन अगर आप चाहते हैं कि आपकी त्रुटियां आपको ईमेल की जाएं, तो >/dev/nullइसके बजाय उपयोग करें । अधिक स्पष्टीकरण के लिए इस ब्लॉग पोस्ट को पढ़ें

यद्यपि आपको अभी भी त्रुटि ईमेल भेजने के लिए एक एमटीए (मेल ट्रांसफर एजेंट) स्थापित करना होगा। पोस्टफ़िक्स सरल के साथ स्थापित करने के लिए पर्याप्त है:sudo apt-get install postfix


जहाँ तक मुझे समझ आया '> / dev / null' केवल उन्हें भेजेगा, और '> / dev / null 2> & 1' सभी त्रुटियों को टाल देगा? मुझे लॉग में त्रुटियां प्राप्त करने के लिए क्या उपयोग करना होगा लेकिन कोई मेल नहीं? मुझे अब कोई मेल नहीं मिल रहा है (जैसा कि मैं चाहता हूं), लेकिन बदसूरत 'कोई एमटीए ...'
गड्ढे

2
afaik, इसे ईमेल पर भेजने के अलावा आउटपुट को लॉग इन करने का कोई तरीका नहीं है। निकटतम चीज़ जो आप कर सकते हैं वह है स्थानीय मेल डिलीवरी के लिए पोस्टफ़िक्स सेट अप करना (यदि आप "sudo apt-get install पोस्टफ़िक्स" चलाते हैं तो यह आपको संकेत देता है कि क्या आप स्थानीय डिलीवरी सेट करना चाहते हैं। जबकि यह शुरू में एक दर्द की तरह दिखता था, यह वास्तव में काम करता है। बहुत बेहतर है। जब भी मैं ssh के माध्यम से लॉग इन करता हूं, मैं मशीन पर एक नया ईमेल देखता हूं यदि पिछली नौकरी विफल हो गई है। मुझे लॉग की जांच करने की तुलना में यह अधिक सुविधाजनक लगता है।
paneer_tikka

2
  1. सबसे पहले, स्थापित करें postfix, जो समस्या को हल कर सकता है

    sudo apt-get install postfix
    
  2. यदि उबंटू, आप crontabफ़ाइल को संपादित कर सकते हैं

    sudo vim /etc/crontab
    
  3. ध्यान ention शीर्ष फ़ाइल को संपादित करें line पहली पंक्ति में कोई कोड नहीं the और दर्ज करें

    MAILTO=root // current system user
    
  4. जब cronकिसी भी कार्य को निष्पादित करता है, तो आप एक ईमेल प्राप्त होगा

    mail
    

1
आपका उत्तर अच्छा लग रहा है, लेकिन मैं सभी निर्देशों की समझ नहीं बना सका। शायद आप इसे सुधार सकते हैं।
zx485

1

आप MAILTO=””अपनी crontabफ़ाइल की शुरुआत में चर सेट कर सकते हैं । इससे ईमेल अलर्ट भी निष्क्रिय हो जाएगा। अपनी क्रोन नौकरियों को संपादित करें / खोलें:

$ crontab -e

फ़ाइल के शीर्ष पर, दर्ज करें:

MAILTO=""

https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/


1

मुझे किटैमैटिक डॉकर टूल्स का उपयोग करने में यह समस्या थी ।
Magento कंटेनर पर जाएं और क्लिक करें exe

तो भागो

apt-get update

यह तब होता है जब आप मैगनेटो को किटेमेटिक पर चलाने की कोशिश कर रहे हैं। वर्चुअल मशीन पर लॉग इस त्रुटि को दिखाएगा:

अद्यतन की जरूरत है।

क्षमा करें यदि यह आपको खो गया है, लेकिन यह है कि यह कैसे काम करता है। आप खोते रहते हैं, लेकिन इसके बारे में बस पढ़ें और एक दिन टुकड़े एक साथ आएंगे। धैर्य रखें।

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