"(CRON) info (Tidak ada MTA diinstal, membuang output)" kesalahan di syslog

198

Saya memiliki instalasi baru Ubuntu 12.04.1 LTS dan sejumlah server.

Saya belum menambahkan pekerjaan cron atau mengedit crontab saya di server tersebut, namun, pada waktu yang bersamaan untuk setiap mesin, saya mendapatkan lonjakan CPU 75% dan info berikut di syslog saya pada saat lonjakan:

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

Saya telah menginstal mono-lengkap dan menjalankan server layanan stack.

Apa cara terbaik bagi saya untuk menghentikan hal ini terjadi? Saya ingin dapat menghapus lonjakan CPU.

sungiant
sumber
Setiap hari pukul 6.25? Itu adalah skrip dari /etc/cron.daily/. Saya hanya punya satu yang mencoba mengirim email: kontes-popularitas. Lihatlah skrip Anda dan lihat skrip mana yang mencoba mengirim email? Itu harus mempersempitnya. Kemudian 'chmod 0644 /etc/cron.daily/script-name' untuk mencegah eksekusi.

Jawaban:

173

Linux menggunakan email untuk mengirim pemberitahuan kepada pengguna. Sebagian besar distribusi Linux memiliki layanan surat (termasuk MTA) yang diinstal. Ubuntu tidak.

Anda dapat menginstal layanan email, misalnya postfix, untuk menyelesaikan masalah ini.

sudo apt-get install postfix

Atau Anda bisa mengabaikannya. Saya tidak berpikir ketidakmampuan cron untuk mengirim pesan ada hubungannya dengan lonjakan CPU (yang terkait dengan pekerjaan mendasar yang sedang dijalankan cron). Mungkin paling aman untuk menginstal MTA dan kemudian membaca pesan-pesannya ( muttadalah pembaca surat sistem yang baik).

martin
sumber
5
Apakah postfix adalah hal yang baik untuk diinstal? MTA mana yang paling mudah digunakan?
endolith
2
postfix adalah mail server yang paling banyak digunakan untuk linux, tetaplah menggunakannya
Rápli András
5
Perlu ditunjukkan bahwa untuk digunakan dengan cron (yaitu jika Anda tidak ingin mengirim email ke luar) selama prosedur instalasi, Anda harus menjawab untuk mengonfigurasikan hanya untuk penggunaan lokal.
steffen
satu-satunya cara saya tahu untuk memeriksa surat maildisediakan oleh mailutils(debian), jika ada cara yang lebih baik untuk postfix?
ThorSummoner
79

Ini terjadi karena pekerjaan cron Anda menghasilkan output dan kemudian daemon cron mencoba untuk mengirim email output itu kepada Anda (yaitu root). Jika Anda tidak membutuhkan output itu, cara termudah untuk menyelesaikannya adalah membuangnya di crontab:

sudo crontab -e

dan tambahkan >/dev/null 2>&1ke setiap pekerjaan:

* * * * * yourCommand >/dev/null 2>&1
rampok
sumber
10
Masalah dengan pendekatan ini adalah tidak menjelaskan penggunaan CPU yang tinggi. Cron jelas berusaha menjadi komunikatif dan ini pada dasarnya hanya mengabaikan hasilnya. Saya akan lebih cenderung menangani output daripada membuangnya, kalau-kalau ada info debug yang berguna.
Oli
1
Oli, meskipun ini adalah pertanyaan lama, saya mengalami masalah yang persis sama tetapi ada di Raspberry PI. Saya melihat banyak No MTA installed, discarding outputpesan di log dan program saya akhirnya berhenti berjalan sendiri. Saya percaya itu karena lonjakan CPU. Sepertinya semua jawaban yang diposting untuk pertanyaan ini tampaknya mengabaikannya.
ThN
4
Untuk menjaga output, masukkan perintah dalam skrip, dan pipa stdout dan stderr ke logger. Sebagai contoh yourCommand >/dev/null 2>&1 | logger -t mycmd,. Ini akan menempatkan output di syslog untuk menjaga keamanan, dan menghentikan keluhan MTA.
CivMeierFan
56

Dalam kasus saya, pesan itu mengisyaratkan masalah izin dengan skrip bash, tapi saya tidak bisa melihatnya sampai saya menginstal MTA.

Seperti yang disarankan, saya berlari:

sudo aptitude install postfix

Saya memilih "Lokal" selama pengaturan dan setelah menjalankan pekerjaan cron lagi:

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

Dalam kasus saya, saya diganti

<user>

dengan "root".

Saya kemudian dapat melihat output kesalahan yang terkait dengan izin.

Martin Carstens
sumber
3
Terima kasih atas komentar ekstra tentang cara memeriksa kotak surat untuk melihat kesalahan dari pekerjaan!
Stuart Allen
32

Seperti yang dinyatakan dalam jawaban sebelumnya, ini terjadi karena pekerjaan cron Anda menghasilkan output, dan kemudian daemon cron mencoba untuk mengirim email output itu kepada Anda. Jika Anda tidak ingin (atau tidak bisa) menginstal MTA, tetapi Anda ingin melihat hasilnya, Anda bisa mengarahkan output pekerjaan cron ke file log. Edit file crontab Anda dengan

crontab -e

(gunakan sudojika masalahnya ada pada root crontab) dan tambahkan setelah setiap perintah, seperti ini:>> /some/log/file 2>&1

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

Jika ada beberapa perintah pada satu baris, dipisahkan oleh ;,  &&  atau ||, Anda harus melakukan di atas untuk setiap perintah, seperti ini:

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

atau kelompokkan mereka, seperti ini:

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

Jika Anda ingin mengabaikan stdout dan hanya menangkap stderr, gunakan saja. Letakkan file log di mana pun Anda inginkan - direktori home Anda ,, atau bahkan jika Anda yakin tidak perlu menyimpannya.> /dev/null 2>> /some/log/file/var/log/tmp

Kemudian lihat file log setelah pekerjaan berjalan.

G-Man
sumber
29

Di crontab tambahkan ini sebagai baris pertama:

MAILTO=""

Ini akan mencegah cron dari mencoba mengirim email.

Ditimbang
sumber
4
Jangan memberikan komentar ( #) setelah MAILTO=""atau tidak akan berhasil
SBF
23

Jika Anda tidak ingin menginstal MTA (yang saat ini tidak saya perlukan), Anda dapat menyalurkan hasil pekerjaan cron ke file log.

sudo crontab -e

maka dengan pekerjaan cron Anda akan terlihat seperti ini.

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

maka Anda bisa mengekor log dan melihat apa yang terjadi

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

Ini adalah apa yang saya lakukan di server mana pun yang saya lihat pesan itu di syslog

Andrew MacNaughton
sumber
Saya sudah melakukan ini, tetapi tidak ada logging yang ditambahkan ke file.
pir
Apakah Anda yakin bahwa tugas cron telah berjalan?
Andrew MacNaughton
Ya, log sistem menunjukkan bahwa itu sedang dimulai.
pir
1
Anda perlu '2> & 1' di akhir baris untuk menangkap output ke stderr ke dalam file.
MattSmith
15

Ini adalah pertanyaan lama tetapi ada jawaban tambahan yang berguna dalam beberapa keadaan.

Pipa output dari perintah cron Anda melalui loggersehingga mereka berakhir di syslog.

Ini sedikit lebih mudah daripada menginstal postfix, dan menempatkan output ini ke syslog bersama log Anda yang lain. Perintah ini akan menangkap stdout DAN stderr sehingga Anda tidak akan melihat No MTA installedpesan dan Anda akan melihat semua output Anda di syslog.

Entri contoh cron:

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

Anda dapat melihat log dengan tag Anda mycmdmenggunakan:

grep 'mycmd' /var/log/syslog
Michael Hunter
sumber
Apakah pipa bekerja di pekerjaan cron?
CivMeierFan
10

Salah satu efek samping dari menambahkan /dev/null 2>&1perintah tugas cron, adalah bahwa ia akan membuang keduanya STDERRdan STDOUT(Kesalahan Standar serta Output). Ini berfungsi dengan baik jika Anda tidak ingin ada email dari cron. Tetapi jika Anda ingin kesalahan Anda diemailkan kepada Anda, gunakan >/dev/nullsaja. Baca posting blog ini untuk penjelasan lebih lanjut .

Anda masih harus menginstal MTA (agen transfer surat) untuk mengirim email kesalahan. Postfix cukup sederhana untuk diinstal dengan:sudo apt-get install postfix

paneer_tikka
sumber
Sejauh yang saya mengerti '> / dev / null' hanya akan mengirim mereka, dan '> / dev / null 2> & 1' akan doscard semua kesalahan? Apa yang harus saya gunakan untuk mendapatkan kesalahan dalam log tetapi tidak ada surat? Saya sekarang tidak mendapatkan surat (seperti yang saya inginkan) tetapi jelek 'tidak MTA ...'
Pit
2
afaik, tidak ada cara untuk mencatat output selain mengirimnya ke email. Hal terdekat yang dapat Anda lakukan adalah mengatur postfix untuk pengiriman surat lokal (jika Anda menjalankan "sudo apt-get install postfix", ia meminta Anda apakah Anda ingin mengatur pengiriman lokal. Walaupun ini awalnya terasa merepotkan, ia sebenarnya berfungsi. jauh lebih baik. Setiap kali saya masuk melalui ssh, saya melihat email baru di mesin jika pekerjaan sebelumnya gagal. Saya merasa lebih nyaman daripada harus memeriksa log.
paneer_tikka
2
  1. Pada awalnya, instal postfix, yang dapat menyelesaikan masalah

    sudo apt-get install postfix
    
  2. Jika Ubuntu, Anda dapat mengedit crontabfile

    sudo vim /etc/crontab
    
  3. Perhatian, edit file teratas, bukan kode apa pun di baris pertama, dan masukkan

    MAILTO=root // current system user
    
  4. Saat cronmenjalankan tugas apa pun, Anda akan mendapatkan email

    mail
    
Shahramlu
sumber
1
Jawaban Anda sepertinya bagus, tetapi saya tidak bisa memahami semua instruksinya. Mungkin Anda bisa memperbaikinya.
zx485
1

Saya punya masalah ini menggunakan alat Docker Kitematic .
Pergi ke wadah magento dan klik exe.

Lalu lari

apt-get update

Ini jika Anda mencoba menjalankan magento di kitematic. Log akan menampilkan kesalahan ini di mesin virtual:

perlu pembaruan.

Maaf jika ini membuat Anda tersesat, tapi itulah cara kerjanya. Anda terus tersesat, tetapi bacalah tentang hal itu dan potongan-potongan itu akan datang bersama suatu hari. Sabar.

Ali Bayati
sumber