#!/bin/bash
df -m > myfile
server_ip_address=$(ip addr show $(ip route | awk '/default/ { print $5 }') | grep "inet" | head -n 1 | awk '/inet/ {print $2}' | cut -d'/' -f1)
if awk '$2 > 10000 && $5 > 90' myfile ; then
echo "Disk Full in $server_ip_address"
else
echo "Nothing wrong with the server"
fi
스크립트를 실행하면 항상 디스크가 꽉 찼다고 출력됩니다. df -m의 출력은 다음과 같습니다.
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/centos-root 949305 512827 436479 55% /
devtmpfs 3811 0 3811 0% /dev
tmpfs 3823 0 3823 0% /dev/abc
tmpfs 3823 18 3806 1% /run
tmpfs 3823 0 3823 0% /sys/fs/cgroup
/dev/sda2 1014 175 840 18% /boot
/dev/sda1 1022 12 1011 2% /boot/efi
tmpfs 765 0 765 0% /run/user/2000
df -m의 출력은 서버마다 다릅니다. 따라서 크기>10GB, 사용률>90%를 비교합니다. 10GB 미만의 일부 디스크 크기는 90% 미만의 디스크 사용량에 중요하지 않을 수 있습니다.
업데이트 1:
GNU bash, 버전 4.2.46(2)-릴리스(x86_64-redhat-linux-gnu)
운영체제는 센토스 7 입니다
현재 코드의 문제점:
두 번째 행의 열을 마지막 행과 비교해야 하는데 현재 코드가 첫 번째 행의 열을 비교하고 있기 때문에 작동하지 않을 것 같습니다. 문제를 해결하는 방법?
답변1
현재 코드의 문제는 df -H의 출력이 항상 GB 단위가 아니라는 것입니다.
여기에 대한 대답은 사용하지 않는 것입니다 -H
. 문서에 설명된 대로 man df
이는 "사람이 읽을 수 있는 출력"으로 의도되었으며 단위는 의도적으로 변경될 수 있습니다.
대신 고정 단위(기본 KB 또는 MB( -m
))를 사용하십시오.
Nagios(Icinga)에 대해서도 알고 싶을 수도 있습니다. 이는 현재 다루고 있는 모니터링 유형을 정확히 처리하기 위한 스크립트가 포함된 모니터링 도구입니다.
스크립트를 실행하면 항상 디스크가 꽉 찼다는 출력이 표시됩니다.
이는 스크립트를 실행하는 동안 오류(파일을 찾을 수 없음, 구문 오류 등)가 발생하거나 스크립트가 0이 아닌 특정 상태로 종료되지 않는 한 항상 성공적으로 끝나기 if awk ...
때문에 항상 true를 반환하기 때문입니다.awk
나는 이런 식으로 대본을 작성하는 것을 고려하는 경향이 있습니다.
#!/bin/sh
myIP=$(
ip -j route |
jq -r '.[] | select(.dst == "default") | .gateway'
)
df=$(
df -lm -x tmpfs |
awk '
NR==1 { header=$0 }
$5+0 > 90 { if (length(header)) { print header; header="" }; print }
'
)
if [ -n "$df" ]
then
echo "Problems with server $myIP"
echo
echo "$df"
else
echo "Disk space seems ok on $myIP"
fi