ディスク容量が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 Used
Javaパラメータのみを取得します。
全体の出力をどのように送信できますか?
答え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)
両方ともコマンドの出力を結果変数に割り当てます。