2009-04-16 4 views
1

유닉스 박스에서 실행중인 시스템 구성 요소를 감지하는 bash 스크립트가 있습니다. 스크립트가 실패하면 이메일을 발송합니다. 스크립트는 매분마다 실행됩니다 (cron을 통해). 15 분마다 경보를 보내는 것을 가장 쉬운 방법은 무엇입니까?스크립트가 경고를 보내지 못하도록 제한

경고를 보낼 때 파일을 만들거나 업데이트 할 수 있습니까? 해당 파일의 날짜가 너무 오래 지난 경우에만 파일을 보낼 수 있습니까?

답변

2

뭔가가 작동하지 않을 수 있습니다 : 오류 상태가 발생하면

stamp=/tmp/mystamp 
# create stamp file, if we haven't yet 
[ ! -f $stmp ] && touch $stamp 
tmp=$(tempfile) 

# see if 15 minutes has passed... 
diff=$(echo $(date -d "15 minutes ago" +%y%d%m%H%M) - $(date -d "$(stat $tmp |grep Change |cut -d: -f2-)" +%y%d%m%H%M) |bc) 
rm $tmp 

# if we last touched the stamp file less than 15 minutes ago 
# then quit 
[ $diff -le 0 ] && exit 0 

# update the stamp file 
touch $stamp 

# do your thing... 
echo 'Warning! Warning!' |mail -s "FOOBAR" [email protected] 
1

경고를 보내는 스크립트에 대해 중개자를 구현할 수 있습니다. sendmail, 다른 메일 응용 프로그램을 통해 '직접'이메일을 보내는 대신 실제로 전화를 걸 수있는 다른 스크립트로 보낼 수 있습니다. 이 스크립트는 메일을 보낸 마지막 시간을 추적 할 수 있습니다 (다른 파일 사용). 이렇게하면 얼마나 자주 보내는 지 확인할 수 있습니다. :)이 같은

0

이 (/tmp/alert.email 말) 임시 파일을 누릅니다. 스크립트의 다음 단계에서 파일이 존재하는지 확인하고, 파일이 존재하고 분 수가 0,15,30,45라면 전자 메일을 보냅니다. 이것이 당신이 원하는 것과 정확히 일치하는지 확신 할 수 없습니다. 기본적으로 :

  • 15 분마다 한 번 이상 전자 메일을 보냅니다.
  • 모든 오류 조건에 대해 전자 메일을 보내지 만 반드시 그렇지는 않습니다.
  • 즉시 또는 최대 14 분 후에 오류 메시지를 보낼 수 있습니다.

    #!/bin/bash 
    
    MIN=`date '+%M'` 
    
    if [ *ERROR_COND* ] ; then 
        touch /tmp/alert.email 
    fi 
    
    if [[ -f /tmp/alert.email && ($MIN = "15" || $MIN = "30" || $MIN = "45" || $MIN = "00") ]] ; then 
        # email here 
        rm -f /tmp/alert.email 
    fi 
    
    :

그래서 나중에 같은이

관련 문제