>

프로세스가 실행 중인지 여부를 테스트 할 수 있도록 매우 간단한 스크립트를 설정했으며, 그렇다면 프로세스가 파일에 닿아 모든 것이 잘 될 것입니다. 그러나 프로세스가 실행 중이 지 않고 파일을 건드리지 않으면 경고를 설정할 수 있기를 원합니다.

pgrep "수면">/dev/null&&touch monitor.log

이 스크립트는 매분마다 crontab에서 실행됩니다. 파일을 건드리지 않은 경우 경고하는 방법이 필요합니까? 이게 가능해?

감사합니다

  • 답변 # 1

    이것은 간단한 파일 수정 시간 검사입니다. 합병증은 주로 하루에 최대 86,400 개의 경보 (보통 긴 휴가 주말에 이러한 종류의 문제가 발생하는 경우) 및 수정 시간 검사기 (또는 크론 또는 시스템)의 추가 합병증으로 인해 발생합니다. )) 호스트 클럭이 올바른지 (실제 시간 차이, 향후 4 년 동안 BIOS 클럭이 발생하거나 NTP가 깨지는 등) 실제로 실행 중입니다.

    #!/bin/sh
    # what we're checking for mtime changes straying from the current system time
    MONITOR=foofile
    THRESHOLD=60
    # use mtime on this file to avoid frequent alert spam should the above stop
    # being updated
    LAST_ALERT=barfile
    LAST_ALERT_THRESHOLD=60
    NOW_MTIME=`date +%s`
    absmtimedelta() {
        delta=`expr $NOW_MTIME - $1`
        # absolute delta, in the event the mtime is wrong on the other side of
        # the current time
        echo $delta | tr -d -
    }
    alertwithlesscronspam() {
        msg=$1
        if [ ! -f "$LAST_ALERT" ]; then
            # party like it's
            touch -t 199912312359 -- "$LAST_ALERT"
        fi
        # KLUGE this stat call is unportable, but that's shell for you
        last_mtime=`stat -c '%Y' -- "$LAST_ALERT"`
        last_abs_delta=`absmtimedelta $last_mtime`
        if [ $last_abs_delta -gt $LAST_ALERT_THRESHOLD ]; then
            # or here instead send smoke signals, carrier pigeon, whatever
            echo $msg
            touch -- "$LAST_ALERT"
            exit 1
        fi
    }
    if [ ! -r "$MONITOR" ]; then
        alertwithlesscronspam "no file alert for '$MONITOR'"
    fi
    MONITOR_MTIME=`stat -c '%Y' -- "$MONITOR"`
    ABS_DELTA=`absmtimedelta $MONITOR_MTIME`
    if [ $ABS_DELTA -gt $THRESHOLD ]; then
        alertwithlesscronspam "mtime alert for '$MONITOR': $ABS_DELTA > $THRESHOLD"
    fi
    
    

    대신 파일 수정 시간 확인 또는 플러그인, 사용자 정의 가능한 경고, 메트릭, 위의 코드보다 나은 코드 등을 지원할 수있는 표준 모니터링 프레임 워크를 고려하십시오.

  • 이전 마운트되었지만 부트되지 않은 ZFS 부트 환경에 대한 FreeBSD의 버전 레벨 가져 오기
  • 다음 sudo script - sudo 스크립트 - 모범 사례?