2017-05-03 8 views
0

私は、トリップウィア違反があるかどうかをチェックする毎時ルートによって実行されるcronジョブを持っています。私は違反しているかどうかにかかわらず、それはまだ私に毎メールを送る。違反がある場合は、レポートが含まれます。違反がなければ、件名だけの空メールが送られます。ここでBashスクリプトは、そうでなければ電子メールを送信します

はスクリプトです:

#!/bin/bash 

# Save report 
tripwire --check > /tmp/twreport 

# Count violations 
v=`grep -c 'Total violations found: 0' /tmp/twreport` 

# Send report 
if [ "$v" -eq 0 ]; then 
     mail -s "[tripwire] Report for `uname -n`" [email protected] < /tmp/twreport 
fi 
+1

空のメールを送信している場合は、/ tmp/twreportが空であると思われます。それは確かに 'v'がゼロに設定される結果になります。そのファイルに実際に書き込まれたものをデバッグすることをお勧めします。 – paxdiablo

+0

ファイルに書き込まれます - 違反が0回、または違反回数x回です。 vは0または1です。手動で実行するとうまく動作しますが、cronでのみ動作しません。 – MarkH

+0

端末とcronジョブの環境には大きな違いがありますので、ここで問題になる可能性があります。例えば、http://stackoverflow.com/questions/1972690/cannot-get-php-cron-script-to-run/1972763#1972763 – paxdiablo

答えて

0

私はあなたのスクリプト行を置く前に、最後のcronでパスを設定

if [ -f /tmp/twreport ] # Check file exists 
then 
v=$(grep -c '^Total violations found: 0$' /tmp/twreport) 
#Not suggested using legacy backticks 
if [ "$v" -eq 0 ]; then 
     mail -s "[tripwire] Report for $(uname -n)" [email protected] < /tmp/twreport 
fi 
fi 

にコードを変更することをお勧めします。二重引用符で囲むよう

# Setting PATH 
PATH=/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/path/to/tripwire:/and/so/on 
# Now,set up the cron-job for the script 
0  11   *    *   0  /path/to/script 
0

しようとすると、これらは、検索用語を確認する動作しない場合は、完全なパスに

v="`/bin/grep -c 'Total violations found: 0' /tmp/twreport`" 

if [ "$v" == "0" ]; then # or = instead of == based on your shell 

を使用しています。 'found:0'の0の前に2つのスペースがあります。

+0

'' 'quotesの使用は問題ではありません。' grep -c'は常に数字を出力します(引用符で囲まれた空白や奇妙なものはありません)。 – paxdiablo

関連する問題