
#!/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
コマンドとは何ですか?何もしないでください、代わりに追加モードで標準エラーをログファイルにリダイレクトします。本質的に、シェルインタプリタは、所与のリダイレクトを使用してそれ自体「再実行」される。スクリプト実行コンテキストを変更する必要もありません。。
答え2
1.まず:#!/bin/bash
代わりに使用#!/BIN/BASH
#!/BIN/BASH
次のスクリプトを実行すると:
bash script.sh
..すべてが正常です。
しかし、以下を実行すると:
./script.sh
..エラーが発生します:
-bash: ./script.sh: /BIN/BASH: bad interpreter: No such file or directory
2.次のコマンドを実行します。
echo 'PATH='$PATH
スクリプトの先頭に出力を追加します。
はい:
# echo 'PATH='$PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin