2014-10-31 3 views
0

디스크 공간 백분율이 사용 된 파티션을 확인하고 제한을 초과하면 경고하는 bash 스크립트를 작성했습니다. 그것은 일부 서버에서 작동하지만 여기에 다른사용 된 디스크 공간을 확인하는 bash 스크립트

 
#!/bin/bash                                               
source /etc/profile 

# Devices to check                                                                                
devnames=`df | awk '{print $1}'|tail -n +2` 
email="myemail" 
threshold=95 
for devname in $devnames 
do 
    if [[ -z "$devname" ]] || [[ "$devname" = "tmpfs" ]]; then 
     continue 
    fi 
#                                                 
    let p=`df -k $devname | grep -v ^File | awk '{printf ("%i", 100 - $4*100/$2); }'` 
# echo "$devname $p"                                            

    if [ $p -ge $threshold ] 
    then 
    df -h $devname | mail -s "$devname is low on space" $email 
    fi 
done 

문제가있는 서버 여기

 
df          
Filesystem  1K-blocks  Used Available Use% Mounted on 
rootfs   20317384 5138584 14154856 27%/
/dev/root  20317384 5138584 14154856 27%/
devtmpfs   32968916  304 32968612 1% /dev 
tmpfs   33002348   0 33002348 0% /dev/shm 
/dev/sda4  1902183556 1617154956 188403296 90% /home 
/dev/sdb4  1901315252 1675315368 129418612 93% /disk2 
/dev/sdc4  1902183556 336514784 1469043468 19% /disk3 
/dev/sdd4  1902183556 1348238780 457319472 75% /disk4 
/dev/root  20317384 5138584 14154856 27% /var/named/chroot/etc/named 
/dev/root  20317384 5138584 14154856 27% /var/named/chroot/var/named 
/dev/root  20317384 5138584 14154856 27% /var/named/chroot/etc/named.conf 
/dev/root  20317384 5138584 14154856 27% /var/named/chroot/etc/named.rfc1912.zones 
/dev/root  20317384 5138584 14154856 27% /var/named/chroot/etc/rndc.key 
/dev/root  20317384 5138584 14154856 27% /var/named/chroot/usr/lib64/bind 
/dev/root  20317384 5138584 14154856 27% /var/named/chroot/etc/named.iscdlv.key 
/dev/root  20317384 5138584 14154856 27% /var/named/chroot/etc/named.root.key 

에 DF 결과는 오류 것입니다 : 나는이 문제를 해결 어떻게

 
/home/util/check_disk_storages.sh  
df: `rootfs': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
/home/util/check_disk_storages.sh: line 18: [: -ge: unary operator expected 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
/home/util/check_disk_storages.sh: line 18: [: -ge: unary operator expected 
df: `devtmpfs': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
/home/util/check_disk_storages.sh: line 18: [: -ge: unary operator expected 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 
df: `/dev/root': No such file or directory 
df: no file systems processed 
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=") 

은?

+1

파일 시스템 이름 (은'df'와 출력의 첫 번째 열) 라인 (15)에을하게 사용하고 라인에 경우 에 대한 [[]]를 사용하지 마십시오 파일 이름없는 당신은 가정 할 수 없다 그러한 파일이 존재합니다. 'df'가 첫 번째 명령에서 필요한 모든 백분율을 제공한다면 왜이 모든 것을하고 있는지 분명하지 않습니다. –

답변

1

다음을 시도해보십시오. 18

#!/bin/bash                                               
source /etc/profile 

# Devices to check                                                                                
devnames=`df | awk '{print $1}'|tail -n +2` 
email="myemail" 
threshold=95 
for devname in $devnames 
do 
    if [[ -z "$devname" ]] || [[ "$devname" = "tmpfs" ]]; then 
     continue 
    fi 
#                                                 
    p=`df -k $devname | grep -v ^File | awk '{printf ("%i", 100 - $4*100/$2); }'` 
# echo "$devname $p"                                            

    if [[ $p -ge $threshold ]] 
    then 
    df -h $devname | mail -s "$devname is low on space" $email 
    fi 
done 
+0

OR 시도 : df -kvh | grep "[0-9] %"| sed "/ [[: space :]] [[: space :]] *// g"| awk '{printf "% -50s : % 3s \ n", $ 5, $ 4}'| egrep ": 9 [6-9] | 100" –

관련 문제