ログが変更された場合に警告する簡単なスクリプトを書きたいのですが。このため、私はgrepを使用して、関心のある行を見つけています。今のところ、次のように機能します。
grep line /var/log/file | mail -s Log [email protected]
問題は、一致する行が見つからなくてもメールを送信することです。 mailutilsのメールユーティリティには、本文が空のメールをドロップするように指示するスイッチがないようです。
そうするための迅速で簡単な方法はありますか?
output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log [email protected]
または、これをcronジョブにして、出力を生成する場合は、ユーザーに電子メールを送信します。/etc/aliasesファイルを編集して(そしてnewaliasesコマンドを実行して)、ボックスにないアドレスにメールを送信できます。
Cronエントリの例(件名を設定することはできません。
1 0 * * * grep line /var/log/file
または、ifneユーティリティを入手できます-これはおそらくあなたが望むものです
grep行/ var/log/file | ifne mail -sログ[email protected]
Ifneは、centosとRHELのepelリポジトリから使用できるように命令します。オンラインでmanページへのリンクが見つかりませんが、そこにあります
ifne(1)
ifne(1)名前ifne-標準入力が空でない場合にコマンドを実行します
構文ifne [-n]コマンド
説明ifneは、標準入力が空でない場合にのみ、次のコマンドを実行します。
オプション-n逆の操作。標準入力が空の場合、コマンドを実行します。
Note that if the standard input is not empty, it is passed through ifne in this case.
例を見つける。 -nameコア| ifneメール-s「コアファイルが見つかりました」ルート
著者Copyright 2008 by Javier Merino
Licensed under the GNU GPL 2008-05-01 ifne(1)
「man mail」は、引数-Eが本文が空の場合にメールの送信を停止することを教えてくれます。私にとってはうまくいきます。
-E
送信メッセージの最初または唯一のメッセージ部分にテキストが含まれていない場合は、送信せずにメッセージを破棄して、プログラムの起動時にskipemptybody変数を効果的に設定します。これは、cron(8)によって開始されたスクリプトからメッセージを送信するのに役立ちます。
参照 https://unix.stackexchange.com/a/100720/27458
ifneを使用するだけです:
grep line /var/log/file | ifne mail -s Log [email protected]