Webサーバーが応答しなくなるたびに電子メールを送信するbashスクリプトがあり、このスクリプトはcron
5分ごとに実行されます。ただし、サイトが数時間ダウンすると、1つのメッセージではなくメッセージが多すぎます。
電子メールを一度だけ送信する最善の方法は何ですか?電子メールを送信する前に、環境変数を使用して確認する必要がありますか? Webサーバーが再起動したらリセットする必要がありますか?環境を汚染することなくこれを行うためのより良い方法はありますか?私が今愚かなことをしているのだろうか?私はシェルスクリプト技術に自信がありません。
#!/bin/sh
output=$(wget http://lon2315:8081 2>&1)
pattern="connected"
if [[ ! "$output" =~ "$pattern" ]]
then
echo "$output" | mail -s "Website is down" "[email protected]"
fi
答え1
環境変数はスクリプト「実行」の間に持続しないため、使用できないと思います。
または、ホームディレクトリの一部の一時ファイルに内容を書き、/tmp
毎回確認できますか?
たとえば、次のようになります。
#!/bin/sh
output=$(wget http://lon2315:8081 2>&1)
pattern="connected"
tempfile='/tmp/my_website_is_down'
if [[ ! "$output" =~ "$pattern" ]]
then
if ! [[ -f "$tempfile" ]]; then
echo "$output" | mail -s "Website is down" "[email protected]"
touch "$tempfile"
fi
else
[[ -f "$tempfile" ]] && rm "$tempfile"
fi
答え2
少し汚れてしまいましたが、/tmp
サーバーを再バックアップすると削除されるファイルやそんなものをどこかに入れておきます。
たぶん、次のようなものがあります。
#!/bin/sh
output=$(wget http://lon2315:8081 2>&1)
pattern="connected"
websitedownfile="/tmp/websitedown"
if [[ ! "$output" =~ "$pattern" ]]; then
if [[ -e $websitedownfile ]]; then
echo "$output" | mail -s "Website is down" "[email protected]"
fi
touch $websitedownfile
else
[[ -f $websitedownfile ]] && rm $websitedownfile
fi