읽는 동안 이메일로 루프 보내기

읽는 동안 이메일로 루프 보내기

제가 작성하고 있는 스크립트에 문제가 있습니다. 사용 가능한 디스크 공간을 모니터링하고 특정 임계값을 초과하는 각 파일 시스템에 대해 이메일을 생성하려고 합니다. "mail" 대신 "echo"와 함께 이 스크립트를 사용하면 터미널에서 출력이 올바르게 표시됩니다. 메일을 병합하면 중요한 경고만 전송되고 이메일 본문에는 추가 파일 시스템이 포함됩니다. 각 파일 시스템에 대해 별도의 이메일을 보내려고 합니다. 나는 답을 찾고 있는 것이 아니지만, 아마도 내 문제가 무엇인지 알아보기 위해 살펴볼 만한 가치가 있는 곳을 찾고 있을 것입니다.

 #!/bin/bash
    #The following script will check filesystems (local/nfs only)
    #and notify via email current user if over certain threshold.

    #Thresholds for script to call
    CRITICAL=90
    ALERT=70

    #Gets local/nfs disk info, greps out header/tmp filesystems and awks column 1 and 5
    #while read loop is enabled to parse through each line
    df -l | grep -vE '(^Filesystem)' | awk '{ print ($5  " " $1)}' | while read output;
    do
        #updates variables to reads current step
        usage=$( echo $output | awk '{print $1}' | cut -d'%' -f1 )
        part=$( echo $output | awk '{print $2}' )

        #if percentage matches alert or critical, email current user
        if [ $usage -ge $CRITICAL ]; then
            mail -s "Critical Warning: Filesystem $part is at $usage% of capacity." $USER
        elif [ $usage -ge $ALERT ]; then
            mail -s "Warning: Filesystem $part is at $usage% of capacity." $USER
        fi
    done

답변1

명령 은 mail해당 메시지가 STDIN에 있을 것으로 예상하므로 df ... awk파이프에서 생성된 나머지 출력을 읽습니다.

메시지에 메시지 본문을 포함하고 싶지 않다면 STDIN을 파이프하면 됩니다 /dev/null.

mail -s "Critical Warning: Filesystem $part is at $usage% of capacity." $USER </dev/null

답변2

위에서 언급했듯이 메일에는 stdio를 가져오는 것을 방지하기 위해 일종의 stdin 데이터 또는 /dev/null이 필요합니다.

그러나 빈 데이터보다는 문제 진단에 도움이 되는 추가 정보를 메시지 본문에 포함하고 싶을 수도 있습니다. 이 예에서는 추가 데이터 표식을 추가합니다. (잘못 구성된 메일 전달자가 메일 헤더의 타임스탬프를 엉망으로 만드는 것을 방지하는 데 항상 유용합니다.) 문제 디스크뿐만 아니라 모든 디스크에 대한 전체 df 보고서 및 디스크 공간이 가득 찬 경우 현재 프로세스의 스냅샷 이는 폭주 프로세스에 유용할 수 있습니다.

Example:
mail -s "Critical Warning: Filesystem $part is at $usage% of capacity." $USER << EOM

Critical Report Generated `date`
Disk status:
`df -h`
Process Status: 
`top -b -n 1'
EOM

관련 정보