Mengirim email dari baris perintah jika badan tidak kosong
12
Saya ingin menulis skrip sederhana yang mengingatkan saya jika ada perubahan log. Untuk ini saya menggunakan grep untuk menemukan garis yang saya minati. Sekarang ini berfungsi seperti ini:
grep line /var/log/file | mail -s Log email@domain.tld
Masalahnya adalah ini mengirim email bahkan jika tidak ada garis yang cocok ditemukan. Utilitas surat dari mailutils tampaknya tidak memiliki saklar yang memberitahukannya untuk menjatuhkan surat yang memiliki badan kosong.
Apakah ada cara cepat dan mudah untuk melakukannya?
output=$(grep line /var/log/file);[[-n "$output"]]&& mail -s Log email@domain.tld
Atau Anda dapat menjadikan ini sebagai pekerjaan cron dan kemudian jika menghasilkan output apa pun, itu akan mengirimkan email kepada pengguna. Anda dapat mengedit file / etc / aliases (dan kemudian menjalankan perintah newaliases) untuk mengirim email ke alamat yang tidak ada di kotak.
Entri entri cron (Anda tidak akan dapat mengatur thogh baris subjek
10*** grep line /var/log/file
Atau Anda bisa mendapatkan utilitas ifne - Ini mungkin yang Anda inginkan
Perhatikan bahwa grep akan keluar dari non-0 jika tidak menghasilkan output, sehingga Anda dapat melakukan: output = $ (baris grep / var / log / file) && echo "$ output" | mail -s Log [email protected]
Sean Reifschneider
Juga, perintah yang Anda sarankan tidak mengirim "$ output" ke perintah mail. :-)
Sean Reifschneider
Saya akan menyarankan untuk mengedit jawaban untuk memasukkan solusi yang diusulkan oleh @Sean Reifschneider
Basil A
FYI ifneditemukan dalam moreutilspaket di ubuntu. Sayangnya paket itu juga membawa parallelkonflik dengan parallelperintah dari parallelpaket tersebut.
artfulrobot
14
"man mail" memberi tahu saya bahwa argumen -E berhenti mengirim email jika isi kosong. bekerja dengan baik untuk saya.
-E
Jika pesan keluar tidak mengandung teks apa pun di bagian pesan pertama atau hanya pesannya, jangan kirimkan tetapi buanglah dengan diam-diam, secara efektif mengatur variabel orang yang ada di startup program. Ini berguna untuk mengirim pesan dari skrip yang dimulai oleh cron (8).
Pada Ubuntu 12.04, GNU Mailtools 2.1 diinstal, dan opsi "-E" untuk "mail" ada singkatan untuk --exec. Itu tidak mengandung opsi "tubuh kosong".
Mark Stosberg
3
@MarkStosberg: Ubuntu memiliki beberapa paket alternatif yang menyediakan mailatau mailxperintah. The bsd-mailxdan heirloom-mailxpaket kedua memberikan mailxdengan -Epilihan yang dijelaskan di sini.
Smylers
1
Bekerja untuk saya di CentOS 6.5:grep "find me" /var/log/something | mail -s "That text you were looking for is now in the logs" -E [email protected]
ifne
ditemukan dalammoreutils
paket di ubuntu. Sayangnya paket itu juga membawaparallel
konflik denganparallel
perintah dariparallel
paket tersebut."man mail" memberi tahu saya bahwa argumen -E berhenti mengirim email jika isi kosong. bekerja dengan baik untuk saya.
sumber
mail
ataumailx
perintah. Thebsd-mailx
danheirloom-mailx
paket kedua memberikanmailx
dengan-E
pilihan yang dijelaskan di sini.grep "find me" /var/log/something | mail -s "That text you were looking for is now in the logs" -E [email protected]
Lihat /unix//a/100720/27458
Cukup gunakan ifne :
sumber