条件が満たされている場合にのみcrontabを実行する

条件が満たされている場合にのみcrontabを実行する

Webサーバーが応答しなくなるたびに電子メールを送信するbashスクリプトがあり、このスクリプトはcron5分ごとに実行されます。ただし、サイトが数時間ダウンすると、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

おすすめ記事