/etc/cron.daily/foo: Kirim email ke pengguna tertentu alih-alih root?

13

Saya menjalankan CentOS 5.5.

Kami memiliki beberapa cronjobs yang disimpan di /etc/cron.daily/. Kami ingin email dari beberapa cronjobs ini untuk pergi ke alamat email tertentu, sementara email lainnya di /etc/cron.daily/ harus pergi ke alamat email default (root @ localhost).

Cronjobs di /etc/cron.daily/ dijalankan dari file / etc / crontab. / etc / crontab menentukan bidang 'MAILTO'. Bisakah saya mengesampingkan ini dengan menetapkan MAILTO di /etc/cron.daily/foo cronjob saya?

Apa cara terbaik untuk menangani ini?

Stefan Lasiewski
sumber
Catatan untuk pengguna CentOS 6.5 (cronie): /etc/crontabtidak menentukan standar.
Adam Monsen

Jawaban:

13

Pengaturan [email protected]dalam /etc/cron.daily/footidak berfungsi. Keluaran skrip tidak dikirim ke [email protected].

Halaman di http://www.unixgeeks.org/security/newbie/unix/cron-1.html juga menyarankan solusi sederhana:

File /etc/cron.daily/foosekarang berisi yang berikut ini:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" [email protected]

Ini akan mengirim email ke '[email protected]' dengan subjek yang sama dengan path lengkap skrip (mis /etc/cron.daily/foo.).

Inilah yang dikatakan Unixgeeks.org tentang ini:

Output dari cron

Seperti yang telah saya katakan sebelumnya, output dari cron akan dikirimkan ke pemilik proses, atau orang yang ditentukan dalam variabel MAILTO, tetapi bagaimana jika Anda tidak menginginkannya? Jika Anda ingin mengirimkan output ke orang lain, Anda bisa mengirim output ke mail perintah. misalnya

cmd | mail -s "Subject of mail" pengguna

Terkadang, saya hanya ingin menerima kesalahan dari cronjob, bukan stdout, jadi saya menggunakan trik ini. Sintaks mungkin terlihat salah pada pandangan pertama, tetapi yakin itu berfungsi. Cronjob berikut akan mengirim STDOUT ke / dev / null, dan kemudian akan menangani STDERR melalui pipa.

doit 2>&1 >/dev/null | mailx -s "$0" [email protected]

Hal yang sama, tetapi kirim ke syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Juga lihat jawaban saya di ServerFault to Cronjob stderr ke file dan email

Stefan Lasiewski
sumber
6

Solusi yang lebih elegan adalah menggunakan /etc/cron.dsecara langsung. Alih-alih /etc/cron.dailymemasukkan skrip Anda , letakkan di suatu tempat seperti /usr/local/sbin/myscript.shlalu buat file /etc/cron.d/myscriptsebagai:

MAILTO=root,[email protected]
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Ini juga memberi Anda lebih banyak kontrol ketika pekerjaan terjadi; misalnya hanya pada hari kerja tertentu dll. Lihat crontab(5)pria itu untuk informasi lebih lanjut.

codebeard
sumber
0

Dengan asumsi Anda memiliki akses SA pada mesin ini, Anda dapat membuat akun pengguna baru, menambahkan tugas ke tugas cron akun ini. Email untuk pengguna ini kemudian dapat diteruskan menggunakan file .forward di folder beranda akun ini. Anda mungkin harus mengatur izin untuk pengguna ini jika tugas cron memerlukan akses khusus.

Apakah ini atau jawaban Stefan paling cocok benar-benar tergantung pada seberapa banyak kerumitan yang Anda inginkan dalam pengaturannya dan apakah Anda ingin pesan kesalahan masuk ke email root atau ke orang-orang yang biasanya memantau hasil harian.

Semoga berhasil

Michael Shaw
sumber