“(CRON) bilgisi (MTA yüklü değil, çıktı atma)” hatası

144

Ubuntu 12.04.1 LTS’nin yeni bir sunucu kurulumu var.

Herhangi bir cron işi eklemedim veya crontab'ımı bu sunucularda değiştirmedim, ancak her bir makine için aynı anda yaklaşık% 75 CPU spike ve syslog'umda aşağıdaki bilgi var:

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

Mono tamamlamam var ve bir hizmet yığını web sunucusu çalıştırıyorum.

Bunun olmasını engellememin en iyi yolu nedir? CPU başlığını kaldırabilmek istiyorum.

    
sordu sungiant 27.11.2012 11:25

10 cevap

138

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

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

sudo apt-get install postfix

Ya da görmezden gelebilirsiniz. Mesaj göndermek için cronun yüklenememesinin CPU başak ile ilgili bir şey yapmadığını düşünmüyorum (bu, cronun çalıştığı temel işe bağlıdır). Bir MTA kurmak ve daha sonra mesajları okumak için en güvenli olabilir ( mutt iyi bir sistem posta okuyucusudur).

    
verilen cevap martin 01.01.2013 09:56
62

Bunun nedeni, cron işlerinizin çıktı üretmesi ve cron daemon'un bu çıktının size (yani root) e-posta göndermeye çalışmasıdır. Bu çıktıya ihtiyacınız yoksa, bunu çözmenin en kolay yolu, crontab’tan çıkarmaktır:

sudo crontab -e

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

* * * * * yourCommand >/dev/null 2>&1
    
verilen cevap rob 26.04.2013 12:27
41

Benim durumumda, mesaj bash betiği ile ilgili bir izin sorununa işaret ediyordu, ancak bir MTA kurmadan onu göremedim.

Önerdiğim gibi:

sudo aptitude install postfix

Kurulum sırasında ve tekrar cron işini çalıştırdıktan sonra "Yerel" seçeneğini 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.

    
verilen cevap Martin Carstens 10.07.2015 16:28
20

crontab’da bunu ilk satır olarak ekle:

MAILTO=""

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

    
syslog'da
verilen cevap 88weighed 27.08.2015 15:06
19

Bir MTA (şu anda ihtiyaç duymadığım) yüklemek istemiyorsanız, cron işinin sonuçlarını bir günlük dosyasına pipetleyebilirsiniz.

sudo crontab -e

sonra cron işin böyle görünürdü.

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

sonra, sadece günlüğü takip edebilir ve neler olduğunu görebilirsiniz

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

Bu mesajı syslogda gördüğüm herhangi bir sunucuda yaptığım şey

    
verilen cevap Andrew MacNaughton 17.04.2016 21:37
13

Daha önceki bir cevapta belirtildiği gibi, Bu, cron işlerinizin çıktı ürettiği için olur, ve sonra cron daemon bu çıktıyı size e-postayla göndermeye çalışır. Bir MTA kurmak istemiyorsanız (veya yapamazsanız), ama sen çıktıyı görmek istiyorsun cron işinin çıktısını bir günlük dosyasına yönlendirebilirsiniz. Crontab dosyanızı düzenleyin

crontab -e

(sorun, root’un crontab'ındaysa sudo kullanın) >> /some/log/file 2>&1 ekle her komuttan sonra, bunun gibi:

0 3 * * * cmd  >> /some/log/file 2>&1

Bir satırda birden fazla komut varsa, ; , && veya || ile ayrılmış, Yukarıdaki gibi her komut için şunu yapmalısınız:

0 3 * * * cmd1  >> /some/log/file 2>&1;  cmd2  >> /some/log/file 2>&1

veya bunları gruplandırın:

0 3 * * * (cmd1;  cmd2)  >> /some/log/file 2>&1

Eğer stdout'u göz ardı etmek ve sadece stderr'i yakalamak istiyorsanız, bunun yerine > /dev/null 2>> /some/log/file kullanın. Günlük dosyasını istediğiniz yere koyun - ana dizininiz, Saklamanız gerekmediğinden /var/log , hatta /tmp .

Ardından, işten sonra günlük dosyasına bakın.

    
verilen cevap G-Man 29.07.2016 04:40
10

/dev/null 2>&1 'nın cron job komutuna eklenmesinin bir yan etkisi, hem STDERR hem de STDOUT ' yi (Standart Error yanı sıra Output) atar. Bu, cron'dan herhangi bir e-posta istemiyorsanız iyi çalışır. Ancak hatalarınızın size e-posta ile gönderilmesini istiyorsanız, bunun yerine >/dev/null kullanın. Daha fazla açıklama için bu blog yayınını okuyun .

Yine de hata e-postalarını göndermek için bir MTA (ileti aktarım aracısı) yüklemeniz gerekir. Postfix ile yüklenebilecek kadar basit: sudo apt-get install postfix

    
verilen cevap paneer_tikka 30.12.2013 18:27
8

Bu eski bir soru ama bazı durumlarda yararlı olan ek bir cevap var.

Cron komutunuzun çıktısını logger yoluyla pipetleyin, böylece syslog'a girerler.

Postfix'i kurmaktan biraz daha kolay ve bu çıkışı diğer günlüklerinizin yanında syslog'a yerleştiriyor. Bu komut stdout AND stderr dosyasını yakalayacak ve böylece No MTA installed mesajını görmeyecek ve tüm çıktınızı syslogda göreceksiniz.

Örnek cron girişi:

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

Günlükleri, mycmd etiketini kullanarak görüntüleyebilirsiniz:

grep 'mycmd' /var/log/syslog
    
verilen cevap Michael Hunter 23.10.2017 00:44
1

MAILTO=”” değişkenini crontab dosyanızın başlangıcında ayarlayabilirsiniz. Bu ayrıca e-posta uyarısını devre dışı bırakacaktır. Cron işlerinizi düzenleyin / açın:

$ crontab -e

Dosyanın en üstünde, şunu girin:

MAILTO=""

İşte

    
verilen cevap Damien Cuvillier 19.02.2018 06:18
0
  1. fisrt install postfix, sorunu çözebilir

    root $ sudo apt-get install postfix

  2. Ubuntu ise, crontab dosyasını düzenleyebilirsiniz

    root $ vim / etc / crontab

  3. dikkat , üst dosya first ilk satırdaki herhangi bir kodu , ve girin

    MAILTO = root // geçerli sistem kullanıcısı

  4. cron herhangi bir görevi gerçekleştirdiğinde email e-posta alacaksınız

    root $ mail

verilen cevap shahramlu 02.09.2018 09:40

Etiketlerdeki diğer soruları oku