Saya akhirnya mengatur jadwal cadangan realistis pada data saya melalui skrip shell, yang ditangani oleh cron pada interval yang ketat. Sayangnya, saya terus menerima email kosong setiap kali CRON dieksekusi dan tidak hanya ketika ada masalah.
Apakah mungkin untuk hanya membuat CRON mengirim email ketika ada masalah, yaitu. saya TAR
tidak mengeksekusi sebagaimana dimaksud?
Begini cara crontab saya diatur untuk saat ini;
0 */2 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com
Terima kasih banyak!
/bin/backup.sh > log_file || (echo Backup failed with exit status $?; cat log_file)
?Menggunakan skrip pembungkus kronis sepertinya ide yang bagus; untuk menggunakannya Anda tidak perlu mengubah skrip Anda.
Dari pada:
melakukan:
Sederhananya; itu akan berjalan diam jika semuanya berjalan lancar (keluar status 0), tetapi akan melaporkan secara lisan jika tidak, dan biarkan cron menangani pelaporan surat.
Info lebih lanjut tentang https://habilis.net/cronic/ .
sumber
chronic
darimoreutils
paket: joeyh.name/code/moreutilsAnda secara khusus diinstruksikan
cron
untuk selalu mengirim email, bahkan ketika/bin/backup.sh
(ngomong-ngomong, seharusnya/usr/local/bin
) masuk Hapus saja| mail -s "Backup status" [email protected]
bagian dan email hanya akan dikirim ketika ada output. Anda mungkin dapat (tergantung pada Andacron
) secara eksplisit mengatur alamat email untuk dikirimkan sebagai tugas dalam file crontab.Untuk detailnya, lihat
sumber
Anda harus mengarahkan
stderr
anmd bukan keduanyastdout
danstderr
.Gunakan
1> /dev/null
tidak2>&1
dan itu harus baik-baik saja. Selain itu, Anda mungkin perlu melaporkan kesalahan dengan benar di skrip cadangan Anda.sumber
Berikut adalah variasi lain yang telah berhasil saya manfaatkan selama bertahun-tahun - menangkap keluaran dan mencetaknya hanya karena kesalahan , memicu email. Ini tidak memerlukan file temp, dan mempertahankan semua output . Bagian yang penting adalah
2>&1
yang mengarahkan ulang STDERR ke STDOUT.Kirim seluruh output melalui konfigurasi cron mailer default:
Sama tetapi dengan alamat dan subjek tertentu:
(alamat juga dapat diubah dengan mengatur MAILTO = xxxx untuk seluruh file crontab)
Anda bahkan dapat melakukan beberapa tindakan saat terjadi kesalahan dan menambahkan ke email:
Ini akan berfungsi untuk perintah sederhana. Jika Anda berurusan dengan pipa kompleks (
find / -type f | grep -v bla | tar something-or-other
), maka Anda lebih baik memindahkan perintah ke skrip dan menjalankan skrip menggunakan pendekatan yang disebutkan di atas. Alasannya adalah bahwa jika ada bagian dari pipa yang menghasilkan STDERR, Anda masih akan mendapatkan email.sumber