2011-02-06 20 views
1

私は2つのスクリプトを持っています。スクリプト "A"、スクリプト "B"。ファイルが変更された場合diffについて

スクリプトAは、ログ内のdhcpacks [dhcpリリースは2分に設定されています]を過去2分間監視しています。 2分ごとにMACアドレスをファイル[/dev/shm/dhcpacks-in-last-2min.txt]に書き込みます。これは動作しています。アクティブなクライアントはこのファイルにあります。スーパー!

スクリプトB:On pastebin

私は/dev/shm/dhcpacks-in-last-2min.txtファイル(1秒毎)の変化を監視するスクリプトを作成しようとしています。 OK。しかし、私のウォッチャースクリプトthe pastebinedはうまくいきません。いつか動作します。いつか誰かにそれを送信します。XY logged out、それは真実ではありません!何も起こりませんでしたが、問題はスクリプトAにありません。

誰かが私に何か不足していることを教えてもらえますか?どのように私はMACアドレスだけを含むファイルを(毎秒)見ることができ、誰かがdhcpackを2分で得られない場合、ファイル/dev/shm/dhcpacks-in-last-2min.txtが変更され、そのクライアントのMACアドレスはそこから削除されます。誰がそれを知っていたのですか?[私のスクリプトを貼り付けましたが、それに何か間違っています。

は今日間私のスクリプトをパス指定して任意のhelp..I'veいただきありがとうございます..:\

答えて

4
  1. は、あなたが比較しているファイルがソートされていることを確認してください。スクリプトAを変更するのが最善の方法です。

  2. スクリプトは統一差分を解析しようとしています。特記しない限り(-u)、diffは「通常」の差分を出力し、変更は<>とマークされます。

  3. メールのヘッダーと本文をで区切ります。改行。 Linuxの


、ファイルを監視する最良の方法は、バージョンinotifyを通じて inotifywaitincronのいずれかです。スクリプトを書き換え時

私の試み:

#!/usr/bin/env bash 
[email protected] 
file=/dev/shm/dhcpacks-in-last-2min.txt 

cp "$file" "$file.old" 
inotifywait -qme modify "$file" | while read -r _; do 
    if ! cmp -s "$file.old" "$file"; then 
     changes=$(diff "$file.old" "$file" | sed -n "s/^</logged out:/p; s/^>/logged in:/p" | tr A-Z a-z) 
     subj="$(date) - $(hostname) - $(echo "$changes" | sed "s/$/,/" | tr "\n" " ")" 

     # In a well-configured system, this would be enough: 
     #mail -s "$subj" "$rcpt" <<< "$changes" 

     # But if yours is not, 
     echo -e "From: <$rcpt>\nSubject: $subj\nTo: <$rcpt>\n\n$changes\n" | ssmtp "$rcpt" 

     cp "$file" "$file.old" 
    fi 
done 
関連する問題