Crontabが実行しているスクリプトからEメールを送信する

Crontabが実行しているスクリプトからEメールを送信する
#!/BIN/BASH
# To alert whenever lsof crosses 80%

maxlimit=32000
echo 'Max limit is ' $maxlimit
tlimit=$(bc <<< $maxlimit*0.8)
echo 'Treshold limit at 80% ' $tlimit
a=$(lsof | wc -l)
echo 'Current usage ' $a
if [ $(bc <<< "$a > $tlimit") -eq 1 ]
then
        echo 'lsof =' $a 'has exceeded 80% of maximum limit' | /usr/bin/Mail -s "ALERT!!!" "*****@cisco.com"
fi

* * * * * bash /root/vasanth/lsef/script.sh

上記のスクリプトでは、出力は対応するメールIDでEメールを送信します。

手動で実行するとメールが送信されます。

ただし、cronに予約されている場合、メールは送信されません。

何が問題なのかわかりません。どのようにデバッグできますか?

ベストアンサー1

このようなcron操作の主な問題は、簡単にデバッグできないことです。

通常、cronジョブは自動的に機能するはずです。エラーがない場合ただし、エラーが発生した場合は非常に詳細に説明する必要があります。

EgorVasilevの答えを拡張すると、次のコマンドを使用してbashスクリプトで「デバッグモード」を簡単にオンにできます。

#!/bin/bash -x
exec 2>>/var/log/cron.log

注文する。最初はflagsを通してスクリプトを解釈します-x。つまり、実行されたすべてのコマンドをstderrにインポートします。

exec 2>>/var/log/cron.logコマンドとは何ですか?何もしないでください、代わりに追加モードで標準エラーをログファイルにリダイレクトします。本質的に、シェルインタプリタは、所与のリダイレクトを使用してそれ自体「再実行」される。スクリプト実行コンテキストを変更する必要もありません。

おすすめ記事