Bisakah cron menulis output pekerjaan ke log * secara default * (bukan surat)?

23

Kita semua tahu cara yang tepat untuk menangani output dari pekerjaan cron adalah mengarahkannya ke file:

0 * * * * /bin/date >> /var/log/date.log 2>&1

Namun, terkadang admin malas, pelupa, atau tidak tahu dan tidak memasukkan pengalihan itu; dalam hal ini output dari pekerjaan akan dikirim ke $ MAILTO atau pengguna atau root yang memiliki. Pada beberapa kotak yang saya kelola, surat dinonaktifkan, jadi keluaran ini masuk ke lubang hitam. Yang saya ingin tahu adalah, apakah ada cara untuk memberitahu cron untuk mengambil output pekerjaan dan bukannya mengirimkannya, membuangnya ke file log catch-all di suatu tempat? Saya menggunakan Ubuntu (8.04 tetapi bermigrasi ke 9.04). Ada petunjuk tentang solusi seperti ini dalam hasil Google acak ini , tetapi saya pikir OP mungkin bingung tentang output cron vs output dari pekerjaan cron.

Saya terbuka untuk solusi yang melibatkan sedikit skrip atau peretasan, tetapi idealnya ini adalah bit konfigurasi yang bisa saya atur di suatu tempat. Saya tidak melihat petunjuk apa pun man cron. Terima kasih!

Brad
sumber

Jawaban:

1

Untuk croniecron (yang direkomendasikan sebagai contoh oleh Buku Pegangan Gentoo), ada argumen "-s" untuk panggilan cron, yang mengirimkan hasil pekerjaan ke log sistem menggunakan syslog.

Tomáš Diviš
sumber
3

Jawaban singkatnya adalah tidak, cron mail kepada pemilik crontab dengan desain. Di cron standar tidak ada cara untuk mengubah ini.

Yang terbaik yang bisa saya pikirkan adalah mengkonfigurasi MTA pada mesin-mesin di mana Anda ingin perilaku ini untuk membuang surat ke file log, bukan ke kotak surat pengguna.

Kamil Kisiel
sumber
3

Saya tidak yakin apa yang Anda maksud persis ketika Anda mengatakan "surat dinonaktifkan". Tapi mungkin Anda bisa mengatur alias /etc/aliasesyang diarahkan ke pipa? Sesuatu seperti

root: "|/bin/cat >> /var/log/cron.log"
innaM
sumber
root: /var/log/cron.logtidak bekerja? feep.net/sendmail/tutorial/intro/aliases.html
endolith
Juga tidak melakukan apa pun untuk saya.
endolith
Ini hanya dapat berfungsi jika Anda menjalankan sendmail sebagai MTA Anda. Ini menjadi kurang umum. (Ya saya tahu bahwa saya membalas komentar berusia 5 tahun!)
Alex L
2

Saya tidak berpikir apa yang Anda minta sebenarnya mungkin dengan cron Ubuntu (atau lainnya).

Selain dari ide geekmonkey, Anda juga bisa menetapkan $ MAILTO ke akun lokal dan merutekan output melalui procmail.

Adam
sumber
1

Tidak pernah mendengar pengaturan cron seperti itu, jadi saya akan mengambil rute scripting.

Buat pekerjaan cron untuk patroli / var / spool / cron / *, dan tambahkan pengalihan ke pekerjaan apa pun yang tidak memilikinya.

geekmonkey
sumber
1

Pilihan lain adalah membuat skrip shell bernama cron_wrapper atau semacamnya, dan lakukan saja seperti ini:

#! / bin / sh

eval "$ * >> /var/log/cronlog.log"
keluar $?

Kemudian, semua crontab Anda hanya perlu sesuatu seperti ini:

* * * * * / usr / local / bin / cron_wrapper gema halo

Catatan saya belum menguji kode ini, itu hanya sebuah ide.

Justin Ellison
sumber
1
Itu tidak menyelesaikan masalah. Jika orang tidak ingat untuk mengatur MAILTO atau mengarahkan stdout ke file, mereka tidak akan ingat untuk menjalankan berbagai hal melalui pembungkus.
Kamil Kisiel
1

Saya tidak tahu apa itu "cron standar". Ada banyak daemon cron, distro yang berbeda menggunakan yang berbeda. Cron Vixie paling banyak digunakan, jadi mungkin itu yang Anda maksud. Tetapi pada beberapa distro, itu tidak akan menjadi default.

Saya telah mengambil alih pengembangan Dillon's cron (dcron), yang merupakan default pada Arch Linux. Distro lain juga menggunakannya, tapi saya tidak tahu apakah itu default di tempat lain. dcron memiliki opsi doa -Muntuk menentukan bahwa Anda ingin menggunakan skrip khusus alih-alih sendmail. Script dipanggil tanpa argumen, dan dengan beberapa header email dan &>output dari setiap cronjobs sebagai stdin. (Jika tidak ada &>output, skrip tidak dipanggil.)

dubiousjim
sumber
1

kenapa tidak kita atur MAILTO = "" di crontab pengguna tertentu. Ini akan menonaktifkan pencatatan pesan email di / var / spool / mail /

lalit
sumber