Gövde boş değilse komut satırından posta gönderme


12

Bir günlük değiştiğinde beni uyaran basit bir komut dosyası yazmak istiyorum. Bunun için ilgilendiğim hatları bulmak için grep kullanıyorum. Şu anda şöyle çalışıyor:

grep line /var/log/file | mail -s Log email@domain.tld

Sorun, eşleşen bir satır bulunmasa bile bunun posta göndermesidir. Mailutils posta yardımcı programı boş bir gövdeye sahip postaları bırakmak için söylüyorum hiçbir anahtar var gibi görünüyor.

Bunu yapmanın hızlı ve kolay bir yolu var mı?

Yanıtlar:


12
output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log email@domain.tld

Ya da bunu bir cron işine dönüştürebilir ve daha sonra herhangi bir çıktı üretirse, kullanıcılara e-posta gönderir. / Etc / aliases dosyasını düzenleyebilir (ve ardından yeni adlar komutunu çalıştırarak) kutuda olmayan adrese posta gönderebilirsiniz.

Cron girişinden çıkış (Konu satırını ayarlayamayacaksınız)

1 0 * * *  grep line /var/log/file

Veya ifne yardımcı programını alabilirsiniz - Bu muhtemelen istediğiniz şeydir

grep satırı / var / log / file | ifne mail -s Günlüğü email@domain.tld

İfne komutu, centos ve RHEL için epel repo'dan mevcut. Çevrimiçi olarak man sayfasına bir bağlantı bulamıyorum ama işte burada

ifne (1)
ifne (1)

NAME ifne - Standart giriş boş değilse komutu çalıştır

SYNOPSIS ifne [-n] komutu

AÇIKLAMA Eğer ve sadece standart giriş boş değilse aşağıdaki komutu çalıştırırsa.

SEÇENEKLER -n Ters işlem. Standart giriş boşsa komutu çalıştırın.

          Note  that  if  the  standard  input  is not empty, it is passed
          through ifne in this case.

ÖRNEK bulmak. ad çekirdeği | ifne mail -s "Temel dosyalar bulundu" kökü

YAZAN Copyright 2008 Javier Merino tarafından

   Licensed under the GNU GPL

                              2008-05-01                           ifne(1)

2
Çıktı oluşturmazsa grep'in 0 dışı moddan çıkacağına dikkat edin, şunları yapabilirsiniz: output = $ (grep line / var / log / file) && echo "$ output" | mail -s Günlüğü
user@example.com

Ayrıca, önerdiğiniz komut posta komutuna "$ output" göndermez. :-)
Sean Reifschneider

Cevabı @Sean Reifschneider
Basil A

FYI ifne, moreutilsubuntu'daki pakette bulunur. Maalesef bu paket , paketin komutuyla parallelhangi çakışmaların ortaya çıktığını da getiriyor . parallelparallel
artfulrobot

14

"man mail" bana -E argümanının gövde boşsa posta göndermeyi durdurduğunu söylüyor. benim için iyi çalışıyor.

-E

Giden mesaj, ilk veya tek mesaj bölümünde herhangi bir metin içermiyorsa, göndermeyin, ancak sessizce atın ve program başlangıcında skipemptybody değişkenini etkili bir şekilde ayarlayın. Bu, cron (8) tarafından başlatılan komut dosyalarından mesaj göndermek için kullanışlıdır.


3
Ubuntu 12.04'te GNU Mailtools 2.1 yüklüdür ve "mail" için "-E" seçeneği --exec için bir kısayol vardır. "Boş gövde" seçeneği içermez.
Mark Stosberg

3
@MarkStosberg: Ubuntu'nun bir mailveya mailxkomut sağlayan birden fazla alternatif paketi vardır . bsd-mailxVe heirloom-mailxpaketler hem sağlamak mailxile -Eseçeneği Burada anlatılan.
Smylers

1
CentOS 6.5'te benim için çalıştı:grep "find me" /var/log/something | mail -s "That text you were looking for is now in the logs" -E mail@example.com
user2208096

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.