inode가 80%에 도달하면 이메일을 보내는 cron 스크립트를 개발 중입니다.
#!/bin/bash
#
OUT=$(df -ih | sed -n '1!p') # remove first line because it's irrelevant - second line is important
RE="([0-9]+)%" # find first numerical item that has percentage sign with it
#
[[ "$OUT" =~ $RE ]]
#
PERCENT=${BASH_REMATCH[0]}
#
if [[ $PERCENT > 80 ]]; then
OUT2=$(./send_email.sh)
echo "${OUT2}"
fi
진행되고 있지만 그다지 좋지는 않습니다.
질문
80%에 도달하면 그 숫자를 나 자신에게 이메일로 보낼 수 있도록 사용된 inode 공간의 비율을 어떻게 알 수 있습니까? 이 문제를 해결하는 더 좋은 방법이 있다는 제안에 열려 있습니다.
답변1
나는 이것이 더 깨끗하다고 생각합니다.
[ -n "$(df --output=ipcent | awk -F '%' 'NR>1 && $1>80')" ] && echo "80% hit."
df --output=ipcent
inode 백분율 열만 출력됩니다.awk -F '%' 'NR>1 && $1>80'
헤더를 건너뛰고( 사용NR>1
) 백분율이 80%보다 큰지 확인하고, 그렇다면 해당 행을 인쇄합니다.
테스트를 통해 파이프 출력을 확인하세요 -n
. 뭔가 인쇄되면 echo
내보내세요. echo
mail 명령으로 대체되었습니다 .
답변2
일반 GNU 버전을 사용하는 경우 df
다음을 권장합니다.
#!/bin/bash
df -P | {
full=()
read header # discard the first line
while read fs blocks used free cap mount
do
cap=${cap%?} # remove the last character
[ $cap -ge 80 ] && full+=("$mount%$cap")
done
[ ${#full[@]} -ne 0 ] && send_email.sh "${full[@]}"
}
-P
출력의 각 행이 파일 시스템인지 확인하십시오 . 그렇지 않으면 df
출력을 보기 좋게 만드는 성가신 개행 문제가 있을 것입니다.
스크립트에서는 마운트 지점에 이상한 문자(예: 공백)가 없다고 가정합니다.
send_email.sh는 사용량이 80% 이상인 파일 시스템 목록을 제공합니다. 형식은 마운트 지점, 백분율 기호 및 양입니다. 필요에 따라 조정하십시오.