ログ内のWordを模索し、そのWord(エラー)が検出された場合に電子メールを送信するスクリプトを作成しました。スクリプトは1時間ごとに実行され、そのWord(エラー)エラーが見つからない可能性があります。
そのため、1時間ごとに実行されるスクリプトは、そのエラーが見つかった場合に1時間ごとに同じメールを送信します。2回または1回だけ送信を停止するにはどうすればよいですか。
if grep 'error' "/path to log"; then
echo "error found" | mailx -s "error alert" email-id
fi
フラグ(またはカウンター)としていくつかの変数(またはファイル)を使用する2番目の条件を使用できます。
たとえば、ファイルをフラグとして使用するには、次の方法でスクリプトを変更できます。
#!/bin/bash
FLAG_FILE="/tmp/flag_file_my_error_email_script"
if grep -iq 'error' "/path/to/log" && [ ! -f "${FLAG_FILE}" ]; then
echo "error found" | mailx -s "error alert" email-id
touch "$FLAG_FILE"
fi
コマンドtouch "$FLAG_FILE"
は、2番目の条件/tmp/flag_file_my_error_email_script
の引数として使用されるファイル[ ! -f "${FLAG_FILE}" ]
を作成します。 Bash条件式について読む 。
特定の数の電子メールを送受信し、スクリプトの機能を抑制する場合、3番目の条件を追加できます。この場合、$FLAG_FILE
のコンテンツは counter として使用されます。
#!/bin/bash
FLAG_FILE="/tmp/flag_file_my_error_email_script"
if grep -iq 'error' "/path/to/log" && [ ! -f "${FLAG_FILE}" ] || (( $(cat "$FLAG_FILE") < 2 )); then
echo "error found" | mailx -s "error alert" email-id
touch "$FLAG_FILE"
NEW_VALUE=$(( $(cat "$FLAG_FILE") + 1)) && echo "$NEW_VALUE" > "$FLAG_FILE"
fi
&&
の意味は前の条件がtrueを意味し、||
の意味は- 前の条件がfalse]を返す場合。
スクリプトの「通常の」作業を復元する場合は、$FLAG_FILE
を削除する必要があります。このファイルは、システムの再起動時に自動的に削除されます。その動作を変更する場合は、スクリプトを実行するユーザーが書き込み権限を持っている/temp
とは異なるディレクトリを選択してください。