df -h 명령의 모든 내용을 문자열로 가져오는 방법

df -h 명령의 모든 내용을 문자열로 가져오는 방법

디스크 공간이 80%를 초과하는 경우 Java 프로그램을 호출하여 이메일을 보내는 CRON 작업을 원합니다.

동시에 df -h명령 내용도 보내고 싶습니다. 내가 한 일은 bash에서 다음과 같이 변수를 만드는 것이었습니다.

DISK_SPACE = ($(df -h))

다음과 같이 Java 프로그램에 전달합니다.

java com.myproject.alerting.DiskSpaceAkert $DISK_SPACE

명령의 전체 출력 대신 df -h부분 출력을 얻습니다. 이것이 내 원래 출력인 경우:

Filesystem      Size  Used Avail Use% Mounted on
udev            7.9G     0  7.9G   0% /dev
tmpfs           1.6G   17M  1.6G   2% /run
/dev/sda1        29G  5.1G   24G  18% /
tmpfs           7.9G     0  7.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock

Filesystem Size UsedJava 매개변수 만 가져옵니다 .

전체 출력을 어떻게 보낼 수 있나요?

답변1

Java를 사용하는 대신 bash를 사용할 수 있습니다.

#!/bin/bash
[email protected]
quota_exceeded=80
df -h | grep -vE 'hostname_or_IP_address:/mount/point|tmpfs|cdrom|Used' | awk '{ print $5 " " $1 }' | while read output; do 
status=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) 
echo $status
partition=$(echo $output | awk '{ print $2 }' ) 
if [ $status -ge $quota_exceeded ]; then 
  echo  "Alert: Almost out of disk space $status" 
  df -h | mail -s "Alert: out of disk space $status" $admins_mail
fi 
done

또는 안감:

#!/bin/bash
df -Ph $f |awk 'NR >1{gsub("%","",$0);print }'| awk -v subject="$subject" '{if($(NF-1)>80){print "mailx -s disk quota exceeded 80% of space in "$NF  " [email protected] |sh"} else{print "No disk space issue exists"}}'| sed "s/out/'out/g" |sed "s/.* /&'  /g"

답변2

result=`command` 또는  result=$(command) 둘 다 명령의 출력을 결과 변수에 할당합니다.

관련 정보