제가 작성하고 있는 스크립트에 문제가 있습니다. 사용 가능한 디스크 공간을 모니터링하고 특정 임계값을 초과하는 각 파일 시스템에 대해 이메일을 생성하려고 합니다. "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