pengembangan-web-mp-pd.com

Bagaimana cara mendapatkan e-mail dari cron-job di Ubuntu?

Saya membuat cron-job di Ubuntu dengan menempatkan executable di salah satu /etc/cron.{daily,hourly,monthly,weekly}. Ada banyak direktori yang dimulai dengan cron:

[email protected]:~$ ls -ld /etc/cron*
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.d
drwxr-xr-x 2 root root 4096 2009-07-16 13:17 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.monthly
-rw-r--r-- 1 root root  724 2009-05-16 23:49 /etc/crontab
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.weekly

Saya ingin mendapatkan email dari skrip saya ketika:

  1. Skrip gagal dan memberikan kode keluar yang bukan nol.
  2. Script memiliki sesuatu untuk diceritakan

Saya telah SSMTP diinstal dan berfungsi, saya mengirim email saya dari akun Google saya. Fakta bahwa SSMTP hanya dapat mengirim email menggunakan satu akun bukan masalah bagi saya. Ini hanya server rumah dan pengguna yang saya miliki tidak memiliki kemampuan untuk menambahkan cron-job.

Saya ingin tahu bagaimana mailing dari skrip biasanya bekerja di Linux/Unix secara umum dan di Ubuntu secara khusus. Saya juga ingin tahu cara yang baik bagi saya untuk mendapatkan surat dalam dua situasi di atas.

46
Deleted

Secara default, cron akan mengirim email ke pemilik akun tempat crontab berjalan.

Crontab seluruh sistem ada di/etc/crontab berjalan di bawah pengguna `root '

Karena root digunakan secara luas, saya sarankan menambahkan alias root ke file/etc/aliases Anda. (jalankan 'newaliases' setelah)

Cara normal untuk menyusun struktur ini adalah agar root dapat dialihkan ke pengguna lain di sistem, mis. bagi saya saya akan alias 'root' ke 'phil' (akun pengguna saya) dan alias 'phil' ke alamat email eksternal saya.

Jika Anda memiliki cron pengguna tertentu yang ingin Anda kirimi email kepada Anda pada output, Anda dapat menggunakan/etc/aliases lagi (asalkan Anda memiliki akses pengguna super) untuk mengarahkan pengguna ke alamat email lain, atau Anda dapat menggunakan yang berikut di atas crontab Anda:

MAILTO="[email protected]"

Jika surat harus dikirim ke pengguna lokal, Anda dapat memasukkan nama pengguna saja:

MAILTO=someuser

Jika Anda memerlukan informasi lebih lanjut, lihat crontab (5) dengan menjalankan:

man 5 crontab
62
Philip Reynolds

Untuk mendapatkan email yang dikirim dari vixie cron Anda akan memerlukan sesuatu yang mereplikasi perintah sendmail. Jadi menginstal postfix atau SSMTP akan menyelesaikan bagian ini. Jika Anda menggunakan postfix maka file alias dapat digunakan untuk memetakan pengguna sistem ke alamat email asli.

Menambahkan MAILTO = "[email protected]" ke bagian atas crontab akan menyebabkan output apa pun dari tugas cron diemail. Ini terlepas dari kode kesalahan.

Untuk skrip yang menampilkan kesalahan dengan benar ke STDERR, maka mudah untuk diemail hanya ketika mereka salah lakukan saja:

MAILTO="[email protected]"
0 5 * * * /bin/some_script > /dev/null

Ini akan mengarahkan hanya STDOUT ke nol. Jika ada pesan STDERR, mereka akan menerima email kepada Anda.

Namun, saya telah menemukan beberapa skrip akan menampilkan kesalahan sebagai STDOUT dan mengatur kode keluar ke 1. Saya belum menemukan cara untuk mengambil output dari ini, tetapi abaikan output jika kode keluar adalah 0. Satu-satunya metode Yang bisa saya pikirkan adalah mengarahkan output ke file, maka jika kode keluar tidak 0 output file itu untuk cron untuk ambil. Sepertinya cukup mengerikan.

29
Theozaurus

Jika Anda ingin mengirim semua output (stdout dan stderr) ke alamat tertentu, maka Anda dapat menggunakan variabel MAILTO. Misalnya, tempatkan yang berikut di bagian atas skrip.

MAILTO="[email protected]"
8
Dan Carley

coba tambahkan "root: [email protected]" ke/etc/aliases

yang akan mengirim semua pesan untuk pengguna itu ke email Anda. jika Anda tidak ingin semua pesan, Anda dapat membuat pengguna khusus untuk ini.

Selama skrip menampilkan sesuatu, Anda akan mendapatkan email.

5
Daniel P

Pada semua server produksi saya yang biasanya menjalankan sekitar 20 cronjobs setiap hari saya bersumpah dengan paket python-cronwrap. Lihat di sini: http://pypi.python.org/pypi/cronwrap . Ini sangat mudah untuk dikonfigurasi dan yang paling dapat diandalkan.

3
Low Kian Seong

Saya tidak berpikir SSMTP melakukan apa yang Anda butuhkan. Anda memerlukan sesuatu yang dapat "menerima" surat dari proses cron dan kemudian mengirimkannya ke kotak surat Anda yang sebenarnya.

Saya menggunakan Sendmail, tapi itu karena saya tangan Sun yang lama; Saya tahu itu ditertawakan oleh semua anak keren hari ini yang menggunakan Postfix. Komunitas ubuntu Anda dapat memandu Anda mengatur sistem email Anda.

2
David Mackintosh

Alternatif - saya mengarsipkan semua root mail ke beberapa file, dan kemudian menghapus email asli.

Saya cron skrip (di sini adalah bagian kunci) -

#!/bin/bash
if `/usr/bin/mail -e`; then
   /usr/bin/mail --print 2>&1 > /tmp/email_${date +"%Y-%m-%d_%H.%M").log
   echo ‘d *’ | /usr/bin/mail -N > /dev/null
fi
exit 0

Ini membuat segalanya rapi dan saya bisa mengawasinya. Saya dapat mengirim email file surat harian ke id email eksternal, dll ...

2
irdroid3