“(CRON) bilgisi (MTA kurulu değil, çıktı atılıyor)” syslog'da hata


198

Yeni bir Ubuntu 12.04.1 LTS kurulumuna ve bir dizi sunucuya sahibim.

Herhangi bir cron işi eklemedim ya da bu sunuculardaki crontab'ımı düzenlemedi, ancak her makine için yaklaşık aynı anda% 75 CPU spike ve siclogumda aşağıdaki bilgiyi spike anında alırım:

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

Mono-komple kurulum yaptım ve bir servis yığını web sunucusu çalıştırıyorum.

Bunu engellemem için en iyi yol nedir? CPU başak kaldırmak mümkün olmak istiyorum.


Her gün saat 6: 25'te? Bunlar /etc/cron.daily/ adresindeki komut dosyalarıdır. Posta göndermeye çalışan tek bir kişi var: popülerlik yarışması. Komut dosyalarınıza bakın ve hangi komut dosyasının posta göndermeye çalıştığını görün Bu daraltmak gerekir. Daha sonra yürütmeyi önlemek için 'chmod 0644 /etc/cron.daily/script-name'.

Yanıtlar:


173

Linux, kullanıcıya bildirim göndermek için posta kullanır. Çoğu Linux dağıtımında yüklü bir posta servisi (MTA dahil) vardır. Ubuntu öyle değil.

Bu sorunu çözmek için bir posta servisi, örneğin posta kodu yükleyebilirsiniz.

sudo apt-get install postfix

Veya görmezden gelebilirsiniz. Cron'un mesaj gönderememesinin CPU çivili ile ilgisi olduğunu sanmıyorum (bu cronun çalıştığı temel işle bağlantılı). Bir MTA takıp mesajları okumak en güvenli olabilir ( muttiyi bir sistem posta okuyucusudur).


5
Postfix kurulumu iyi bir şey midir? Hangi MTA'yı kullanmak daha kolaydır?
Endolith

2
postfix linux için en yaygın kullanılan posta sunucusudur, buna sadık olun
Rápli András

5
Kurulum prosedürü sırasında cron (kullanım için gerçekten dışarıya e-posta göndermek istemiyorsanız) ile kullanım için, yalnızca yerel kullanım için yapılandırmak için cevap vermeniz gerektiğine dikkat etmeniz gerekir.
steffen

postaları kontrol etmeyi bildiğim tek yol postfix için daha iyi bir yol varsa, (debia) mailtarafından sağlanır. mailutils
ThorSummoner

79

Bunun nedeni, cron işlerinin çıktı üretmesi ve cron daemonunun bu çıktıyı size e-posta ile göndermeye çalışmasıdır (yani root). Bu çıktıya ihtiyacınız yoksa, bunu çözmenin en kolay yolu crontab'da atmaktır:

sudo crontab -e

ve >/dev/null 2>&1her işe ekleyin :

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

10
Bu yaklaşımla ilgili sorun, yüksek CPU kullanımını açıklamamasıdır. Cron açıkça iletişim kurmaya çalışıyor ve bu sadece çıktıyı görmezden geliyor. Yararlı hata ayıklama bilgisi olması durumunda, çıktıyı elden çıkarmaktan daha fazla eğimli olurdum.
Oli

1
Oli, bu eski bir soru olmasına rağmen, aynı sorunu yaşıyorum ama bu Ahududu PI'da. Kayıtta bir sürü No MTA installed, discarding outputmesaj görüyorum ve programım sonunda kendi kendine çalışmaya başladı. İşlemciliğin yükselmesinden dolayı olduğuna inanıyorum. Görünüşe göre bu soruya gönderilen cevaplar bunu görmezden geliyor gibi görünüyor.
ThN

4
Çıktıyı korumak için, komut dosyasını bir betiğe koyun ve stdout ve stderr 'i yöneltin logger. Örneğin, yourCommand >/dev/null 2>&1 | logger -t mycmd. Bu, güvenliğin sağlanması için çıktıyı syslog'a koyacak ve MTA şikayetlerini durduracaktır.
CivMeierFan

56

Benim durumumda, mesaj bash betiğiyle ilgili bir izin problemine işaret ediyordu, ancak bir MTA yükleyene kadar göremedim.

Önerdiğim gibi koştum:

sudo aptitude install postfix

Kurulum sırasında ve cron işini tekrar çalıştırdıktan sonra "Yerel" i seçtim:

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

Benim durumumda değiştirdim

<user>

"root" ile.

Daha sonra izinlerle ilgili hata çıktısını görebildim.


3
İşten kaynaklanan hataları görmek için posta kutusunun nasıl kontrol edileceğine dair ekstra yorumunuz için teşekkür ederiz!
Stuart Allen

32

Daha önceki bir cevapta belirtildiği gibi, bunun nedeni cron işlerinin çıktı üretmesi ve cron daemonunun bu çıktıyı size e-postayla göndermeye çalışmasıdır. Bir MTA kurmak istemezseniz (veya edemezseniz), ancak çıktısını görmek istiyorsanız, cron işinin çıktısını bir günlük dosyasına yönlendirebilirsiniz. Crontab dosyanızı şununla düzenleyin:

crontab -e

( sudoeğer konu root'un crontab'ındaysa kullanın) ve her komuttan sonra şöyle ekleyin :>> /some/log/file 2>&1

0 3 * * * cmd   >> / bazı / log / dosya 2> & 1

Birden komutlar bir çizgi üzerinde varsa, ayrılmış ;,  &&  ya da ||böyle, her komut için yukarıdaki yapmalıyım:

0 3 * * * cmd 1   >> / some / log / dosya 2> & 1;  cmd 2   >> / bazı / log / dosya 2> & 1

veya bunları gruplayın, şöyle:

0 3 * * * ( cmd 1 ;   cmd 2 )   >> / some / log / dosya 2> & 1

Stdout'u yoksaymak ve yalnızca stderr'yi yakalamak istiyorsanız, bunun yerine kullanın. Günlük dosyasını istediğiniz yere yerleştirin - ana dizininizde veya saklamanıza gerek olmadığından emin olsanız bile .> /dev/null 2>> /some/log/file/var/log/tmp

Ardından iş çalıştıktan sonra günlük dosyasına bakın.


28

Crontab'da bunu ilk satır olarak ekleyin:

MAILTO=""

Bu, cron'un bir e-posta göndermeye çalışmasını önleyecektir.


4
Herhangi bir yorum ( #) koymadan MAILTO=""veya çalışmazsa
SBF

23

Bir MTA kurmak istemiyorsanız (ki şu anda buna gerek yok) cron işinin sonuçlarını bir günlük dosyasına aktarabilirsiniz.

sudo crontab -e

o zaman cron işinle böyle gözükecekti.

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

o zaman sadece kütüğü kuyruk ve ne olduğunu görebiliyorsun

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

Bu mesajı syslog'da gördüğüm herhangi bir sunucuda yapıyorum.


Bunu yaptım, ancak dosyaya hiçbir günlük eklenmedi.
pir

Çalışmakta olan cron işinden emin misin?
Andrew MacNaughton

Evet, sistem günlüğü başlatıldığını gösterir.
pir,

1
Çıktıyı dosyaya sokmak için satırın sonunda '2> & 1' gerekir.
MattSmith,

15

Bu eski bir sorudur, ancak bazı durumlarda yararlı olan ek bir cevap vardır.

Cron komutunuzun çıktısını, syslog'da loggerbitmeleri için yönlendirin.

Postfix'i kurmaktan biraz daha kolaydır ve bu çıktıyı diğer günlüklerinizin yanında syslog'a koyar. Bu komut stdout AND stderr komutunu yakalar, böylece No MTA installedmesajı görmezsiniz ve tüm çıktılarınızı syslog'da görürsünüz.

Örnek cron girişi:

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

Aşağıdakileri mycmdkullanarak etiketinizle günlükleri görüntüleyebilirsiniz :

grep 'mycmd' /var/log/syslog

Borular cron işlerinde çalışıyor mu?
CivMeierFan

10

Ekleyerek bir yan etkisi /dev/null 2>&1Cron komutuna, her iki kaybolacak olması STDERRve STDOUT(Standart Hata yanı sıra Çıktı). Bu, cron'dan e-posta istemiyorsanız işe yarar. Ancak hatalarınızın size e-postayla gönderilmesini istiyorsanız >/dev/nullbunun yerine kullanın. Daha fazla açıklama için bu blog gönderisini okuyun .

Yine de hata e-postalarını göndermek için bir MTA (posta aktarım aracısı) yüklemeniz gerekecek. Postfix, yüklemek için yeterince basit:sudo apt-get install postfix


Anladığım kadarıyla '> / dev / null' sadece onları gönderecek ve '> / dev / null 2> & 1' tüm hataları silecek mi? Günlükte hata almak için posta kullanmak istemem ne olur? Artık posta alamadım (istediğim gibi) ama çirkin 'hayır MTA…'
Çukur

2
afaik, e-postalara göndermek yerine çıktıyı kaydetmenin bir yolu yoktur. Yapabileceğiniz en yakın şey, yerel posta teslimi için posta ekini ayarlamaktır (eğer "sudo apt-get install postfix" i çalıştırırsanız, yerel teslimatı ayarlamak isteyip istemediğinizi sorar. ssh ile giriş yaptığımda, önceki bir iş başarısız olursa makinede yeni bir e-posta görüyorum.Günlüğü kontrol etmekten daha uygun buluyorum.
paneer_tikka

2
  1. İlk başta, yükleme postfix, sorunu çözebilir

    sudo apt-get install postfix
    
  2. Ubuntu ise crontabdosyayı düzenleyebilirsiniz.

    sudo vim /etc/crontab
    
  3. Dikkat , ilk dosyayı düzenleyin , ilk satırda kod girmeyin enter

    MAILTO=root // current system user
    
  4. Ne zaman cronherhangi bir görevi yürütür, bir e-posta alacaksınız

    mail
    

1
Cevabınız iyi görünüyor, ama tüm talimatları anlamıyorum. Belki iyileştirebilirsin.
zx485


1

Kitematic Docker araçlarını kullanırken bu sorunu yaşadım .
Magento kabına git ve tıkla exe.

O zaman koş

apt-get update

Eğer Magento'yu kitematik üzerinde çalıştırmaya çalışıyorsan. Günlük bu hatayı sanal makinede gösterecek:

güncellemeye ihtiyacım var.

Üzgünüm, bu seni kaybettirdi, ama iş böyle. Sen kaybolmaya devam ediyorsun, ama sadece şunu oku ve parçalar bir gün bir araya gelecek. Sabırlı ol.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.