Cronjob - 명령, 이메일에서 inode % 제거

Cronjob - 명령, 이메일에서 inode % 제거

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=ipcentinode 백분율 열만 출력됩니다.

  • awk -F '%' 'NR>1 && $1>80'헤더를 건너뛰고( 사용 NR>1) 백분율이 80%보다 큰지 확인하고, 그렇다면 해당 행을 인쇄합니다.

테스트를 통해 파이프 출력을 확인하세요 -n. 뭔가 인쇄되면 echo내보내세요. echomail 명령으로 대체되었습니다 .

답변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% 이상인 파일 시스템 목록을 제공합니다. 형식은 마운트 지점, 백분율 기호 및 양입니다. 필요에 따라 조정하십시오.

관련 정보