2011-02-06 2 views
1

2 개의 스크립트가 있습니다. 스크립트 "A", 스크립트 "B".파일이 변경되면 diff에 관한 이메일이 전송됩니다.

스크립트 A는 지난 2 분 동안 로그에서 dhcpacks [dhcp 출시가 2 분으로 구성됨]을 보며 규칙적입니다. 2 분마다 MAC 주소를 [/dev/shm/dhcpacks-in-last-2min.txt] 파일에 씁니다. 좋아, 이건 작동 중이 야, 활성 클라이언트는이 파일에 있습니다. 감독자!

스크립트 B : On pastebin

나는 /dev/shm/dhcpacks-in-last-2min.txt 파일의 변경 (1 초)을 감시하는 스크립트를 만들려고 해요. 승인. 하지만 : 내 감시자 스크립트 the pastebined은 잘 작동하지 않습니다. 때로는 작동하지만 때로는 그 사람에게 XY logged out을 전송하지만 사실이 아닙니다. 아무 일도 일어나지 않았고 문제는 스크립트 A에 없습니다.

제가 누락 된 부분을 지적 해 줄 수있는 사람이 있습니까? MAC 주소 만 포함 된 파일을 (매 초마다) 어떻게 볼 수 있으며, 누군가가 dhcpack을 2 분 내에 얻지 못하면 /dev/shm/dhcpacks-in-last-2min.txt 파일이 변경되고 클라이언트 MAC 주소가 없어 질 것입니다. 그것이 누구 였는지 알고 있습니다. 내 대본을 붙여 넣었습니다.

지금 일 내 스크립트를 경로 지정되어있는 help..I've 주셔서 감사합니다 .. : \

답변

4
  1. 당신이 비교되는 파일 정렬되어 있는지 확인합니다. 가장 좋은 방법은 스크립트 A를 수정하는 것입니다.

  2. 스크립트가 통합 diff를 구문 분석하려고합니다. 달리 명시하지 않는 한 (-u) diff은 "normal"diff를 출력하고 변경 사항은 <>으로 표시됩니다.

  3. 메일 머리글과 본문을 두 개로 구분해야합니다 ( 개행). 리눅스에


, 파일을 볼 수있는 가장 좋은 방법은, inotify를 통해 inotifywait 또는 incron 중 하나입니다.

스크립트 재 작성하려고 시도한 :

#!/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 
관련 문제