سؤال "(CRON) معلومات (لم يتم تثبيت MTA ، تجاهل الإخراج)" خطأ في سجل النظام


لدي تثبيت جديد لـ Ubuntu 12.04.1 LTS على عدد من الخوادم.

لم أضف أي وظائف cron أو قمت بتعديل crontab الخاص بي على هذه الخوادم ، ولكن في نفس الوقت تقريباً لكل جهاز ، أحصل على 75٪ من وحدة المعالجة المركزية (CPU) والمعلومات التالية في سجل النظام الخاص بي في وقت الارتفاع:

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

لدي أحادي كاملة مثبتة وأقوم بتشغيل خادم ويب مكدّس للخدمة.

ما هي أفضل طريقة لي لمنع هذا من الحدوث؟ أود أن أتمكن من إزالة ارتفاع وحدة المعالجة المركزية.


147
2017-11-27 10:25


الأصل


كل يوم في 6:25؟ هذه نصوص من /etc/cron.daily/. لدي محاولة واحدة فقط لإرسال البريد: شعبية مسابقة. تبدو على الرغم من النصوص الخاصة بك ومعرفة أي برنامج نصي يحاول إرسال البريد؟ يجب أن تضيقه. ثم "chmod 0644 /etc/cron.daily/script-name" لمنع التنفيذ.


الأجوبة:


يستخدم Linux البريد لإرسال إشعارات إلى المستخدم. تحتوي معظم توزيعات Linux على خدمة بريد (بما في ذلك MTA) مثبتة. أوبونتو لا على الرغم من ذلك.

يمكنك تثبيت خدمة بريد ، postfix على سبيل المثال ، لحل هذه المشكلة.

sudo apt-get install postfix

أو يمكنك تجاهلها. لا أعتقد أن عدم قدرة cron على إرسال الرسائل له أي علاقة مع ارتفاع وحدة المعالجة المركزية (وهذا مرتبط بالمهمة الأساسية التي تعمل بها cron). قد يكون من الأسلم تثبيت MTA ثم قراءة الرسائل (mutt هو قارئ بريد نظام جيد).


139
2018-01-01 08:56



هل postfix شيء جيد لتثبيت؟ ما هي MTA الأسهل في الاستخدام؟ - endolith
postfix هو خادم البريد الأكثر استخداما على نطاق واسع لينكس ، والتشبث به - Rápli András
تجدر الإشارة إلى أنه للاستخدام مع cron (هذا إذا كنت لا تريد إرسال البريد الإلكتروني إلى الخارج) أثناء إجراء التثبيت ، يجب الإجابة على الإعداد للاستخدام المحلي فقط. - steffen


يحدث هذا لأن وظائف cron الخاصة بك تنتج مخرجات ثم يحاول cron خداع البريد الإلكتروني هذا الإخراج لك (أي الجذر). إذا لم تكن بحاجة إلى هذا الإخراج ، فإن أسهل طريقة لحل هذه المشكلة هي التخلص منه في crontab:

sudo crontab -e

و أضف >/dev/null 2>&1 لكل وظيفة:

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

63
2018-04-26 10:27



المشكلة مع هذا النهج هو أنه لا يفسر استخدام CPU عالي. من الواضح أن Cron تحاول أن تكون تواصلية ، وهذا في الأساس مجرد تجاهل للإنتاج. سأكون أكثر ميلا للتعامل مع الإخراج من تجاهلها ، فقط في حالة وجود معلومات تصحيح الأخطاء مفيدة. - Oli♦
أولي ، على الرغم من أن هذا سؤال قديم ، إلا أنني أواجه نفس المشكلة بالضبط ، لكني في Raspberry PI. أرى حفنة من No MTA installed, discarding output في السجل ويتوقف برنامجي عن العمل من تلقاء نفسه. أعتقد أنه بسبب ارتفاع وحدة المعالجة المركزية. يبدو أن كل الإجابات المنشورة لهذا السؤال يبدو أنها تتجاهل ذلك. - ThN
للحفاظ على الإخراج ، ضع الأمر في البرنامج النصي ، و stdd الأنابيب stderr إلى logger. فمثلا، yourCommand >/dev/null 2>&1 | logger -t mycmd. سيؤدي هذا إلى وضع المخرجات في syslog للحفظ الآمن ، ووقف شكاوى MTA. - CivMeierFan


في حالتي ، كانت الرسالة تشير إلى مشكلة في الأذونات مع البرنامج النصي bash ، ولكن لم أتمكن من رؤيتها حتى أقوم بتثبيت MTA.

كما اقترح ركضت:

sudo aptitude install postfix

اخترت "Local" أثناء الإعداد وبعد تشغيل مهمة cron مرة أخرى:

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

في حالتي استبدلت

<user>

مع "الجذر".

لقد تمكنت بعد ذلك من رؤية الخطأ الناتج المتعلق بالأذونات.


42
2017-07-10 14:28



نشكرك على التعليق الإضافي على كيفية التحقق من صندوق البريد لمعرفة الأخطاء من العمل! - Stuart Allen


في crontab أضف هذا السطر الأول:

MAILTO=""

هذا سيمنع cron من محاولة إرسال بريد إلكتروني.


20
2017-08-27 13:06



لا تضع أي تعليقات (#) بعد MAILTO="" أو أنها لن تعمل - SBF


إذا كنت لا ترغب في تثبيت MTA (التي لا حاجة لها حاليًا) يمكنك توجيه نتائج مهمة cron إلى ملف سجل.

sudo crontab -e

ثم مع مهمة كرون الخاص بك سيبدو مثل هذا.

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

ثم يمكنك فقط ذيل السجل ومعرفة ما حدث

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

هذا ما كنت أفعله على أي خادم أراه تلك الرسالة في سجل النظام


19
2018-04-17 19:37



لقد فعلت هذا ، ولكن لا يتم إضافة أي تسجيل إلى الملف. - pir
هل أنت متأكد من أن وظيفة كرون كانت تعمل؟ - Andrew MacNaughton
نعم ، يُظهر سجل النظام أنه قيد التشغيل. - pir
تحتاج إلى '2> & 1' في نهاية السطر لالتقاط الإخراج إلى stderr إلى الملف. - MattSmith


كما ورد في إجابة سابقة ، يحدث هذا لأن وظائفك في cron تنتج ثم يحاول cron خداع البريد الإلكتروني هذا الإخراج لك. إذا كنت لا تريد (أو لا تستطيع) تثبيت MTA ، لكنك تريد رؤية المخرجات يمكنك إعادة توجيه إخراج مهمة cron إلى ملف سجل. تحرير ملف crontab الخاص بك مع

crontab -e

(استعمال sudo إذا كانت المشكلة مع crontab الجذر) و أضف >> / بعض / سجل / ملف 2>&1 بعد كل أمر ، على النحو التالي:

0 3 * * * كمد  >> / بعض / سجل / ملف 2> & 1

إذا كانت هناك عدة أوامر على الخط ، مفصوله ب ;، &&أو ||، يجب عليك القيام بما ورد أعلاه لكل أمر ، على النحو التالي:

0 3 * * * كمد1  >> / بعض / سجل / ملف 2> & 1؛ كمد2  >> / بعض / سجل / ملف 2> & 1

أو تجميعها ، على النحو التالي:

0 3 * * * (كمد1. كمد2)  >> / بعض / سجل / ملف 2> & 1

إذا كنت تريد تجاهل stdout والتقاط stderr فقط ، استعمال > /dev/null 2>> / بعض / سجل / ملففي حين أن. ضع ملف السجل في أي مكان تريده - دليل منزلك ، /var/log، او حتى /tmp إذا كنت متأكدًا من أنك لن تحتاج إلى الاحتفاظ بها.

ثم انظر إلى ملف السجل بعد تشغيل المهمة.


14
2017-07-29 02:40





واحد من الآثار الجانبية لإضافة /dev/null 2>&1 لأمر مهمة كرون ، هو أنه سيتم تجاهل كلا STDERR و STDOUT (الخطأ القياسي وكذلك الناتج). هذا يعمل بشكل جيد إذا كنت لا تريد أي رسائل البريد الإلكتروني من كرون. ولكن إذا كنت تريد أن يتم إرسال أخطاءك إليك عبر البريد الإلكتروني ، فاستخدمها >/dev/null في حين أن. قراءة هذا بلوق وظيفة لمزيد من الشرح.

ستظل بحاجة إلى تثبيت MTA (وكيل نقل الرسالة) لإرسال رسائل الخطأ الإلكترونية. Postfix بسيط بما يكفي للتثبيت مع: sudo apt-get install postfix


10
2017-12-30 17:27



بقدر ما فهمت '> / dev / null' سترسلها فقط ، و '> / dev / null 2> & 1' سوف doscard جميع الأخطاء؟ ما الذي يتعين عليّ استخدامه للحصول على أخطاء في السجل ولكن لا توجد رسائل بريد؟ أنا الآن لم أحصل على رسائل (كما أريد) ولكن القبيح "لا MTA ..." - Pit
afaik ، لا توجد طريقة لتسجيل الإخراج بخلاف إرسالها إلى رسائل البريد الإلكتروني. أقرب شيء يمكنك القيام به هو إعداد postfix لتسليم البريد المحلي (إذا قمت بتشغيل "sudo apt-get install postfix" ، فإنه يحثك على ما إذا كنت ترغب في إعداد التسليم المحلي. في حين أن هذا يشبه الألم في البداية ، فإنه يعمل في الواقع كلما قمت بتسجيل الدخول عبر ssh ، أرى رسالة بريد إلكتروني جديدة على الجهاز في حالة فشل مهمة سابقة ، وأجدها أكثر ملاءمة من التحقق من السجل. - paneer_tikka
أعتقد أن هذا يمكن أن يكون جيدًا بالنسبة لي. شكر - Pit


هذا سؤال قديم ولكن هناك إجابة إضافية مفيدة في بعض الظروف.

قم بتوصيل إخراج الأمر الخاص بك من خلال cron logger حتى ينتهي بهم الأمر في syslog.

إنه أسهل قليلاً من تثبيت postfix ، ويضع هذا الإخراج في syslog إلى جانب السجلات الأخرى. سيقوم هذا الأمر بالتقاط stdout و stderr حتى لا ترى No MTA installed وسترى كل مخرجاتك في سجل النظام.

مثال على إدخال cron:

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

يمكنك عرض السجلات بعلامتك mycmd باستخدام:

grep 'mycmd' /var/log/syslog

8
2017-10-22 22:44



هل تعمل الأنابيب في وظائف cron؟ - CivMeierFan


يمكنك ضبط MAILTO=”” متغير في بداية الخاص بك crontab ملف. سيؤدي ذلك أيضًا إلى تعطيل تنبيه البريد الإلكتروني. تحرير / فتح مهام cron الخاصة بك:

$ crontab -e

في الجزء العلوي من الملف ، أدخل:

MAILTO=""

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


1
2018-02-19 05:18