定期的にメールでハードディスク状況を通知する

したいこと

  • Macで一週間に一度ハードディスクの使用状況をメールする。

環境

やること

launchdとは

cronのmac版的なもの。定期的に色々実行してくれる
Undocumented Mac OS X:第1回 initを置き換えるlaunchd【前編】 (1/3) - ITmedia エンタープライズ


今回内部環境の都合上、各ハードディスクの総容量が取得できないのでそこはガチ記述にした。
どちらもutf-8で書いた。

CheckCapacity.sh

円マークになっちゃってるとこはバックスラッシュでございます。

#!/bin/bash

###snowin

#data,system 総容量を設定
DMAX=280.70
SMAX=150.74

#data,system 配列作成
DATA=(`df -g -t hfs |  sed -n '/\/Volumes\/data/p' `)
SYSTEM=(`df -g -t hfs |  sed -n '/\/Volumes\/system/p' `)

#容量のパーセント計算
DATAP=`echo "scale=2;100 * ${DATA[2]} / $DMAX" | bc`
SYSTEMP=`echo "scale=2;100 * ${SYSTEM[2]} / $SMAX" | bc`


strDATA=${DATA[5]}" | 容量 : "$DMAX"G | 使用領域 : "${DATA[2]}"G | 使用% : "$DATAP"%"
strSYSTEM=${SYSTEM[5]}" | 容量 : "$SMAX"G | 使用領域 : "${SYSTEM[2]}"G | 使用% : "$SYSTEMP"%"

ALERT="-------------------"
#容量90%以上を判定
if test `echo "$DATAP > 90" | bc` -eq 1; then
	ALERT+=`echo "dataの空き容量が少なくなっています。"`
fi
if test `echo "$SYSTEMP > 90" | bc` -eq 1; then
	ALERT+=`echo "systemの空き容量が少なくなっています。"`
fi

#送信先
address="自分のメールアドレス@hogehoge.com"

#メール主題
#`date`は現在の日時を表示
subject="容量-`date '+%Y/%m/%d'`"

#メール送信
#echo -e $strDATA$strSYSTEM$ALERT | mail -s "$subject" $address
mail -s "$subject" $address << mailbody
$strDATA
$strSYSTEM
$ALERT
mailbody
exit 0

net.snowin.CheckCapacity.plist

lingonで記述
launchdでスクリプトを自動実行 » \(>ヮ<)/

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>AbandonProcessGroup</key>
	<true/>
	<key>Label</key>
	<string>net.snowin.CheckCapacity</string>
	<key>ProgramArguments</key>
	<array>
		<string>/Library/LaunchDaemons/CheckCapacity.sh</string>
	</array>
	<key>StandardErrorPath</key>
	<string>/dev/null</string>
	<key>StandardOutPath</key>
	<string>/dev/null</string>
	<key>StartCalendarInterval</key>
	<dict>
		<key>Hour</key>
		<integer>10</integer>
		<key>Minute</key>
		<integer>0</integer>
		<key>Weekday</key>
		<integer>1</integer>
	</dict>
</dict>
</plist>

月曜日の朝10時にメールが来るように設定。
Hourだけの設定だと指定時間1分ごとにメールが来て大変なことになった。


これを記述しないとメール送れないっぽい
AbandonProcessGroup

tkoki blog: Mac OS Xでの定期的な処理 - launchdについて
の記事に助けられた。

ファイル設置

net.snowin.CheckCapacity.plistとCheckCapacity.shを
/Library/LaunchDaemons/
に移動
terminalで

>sudo chmod +x /Library/LaunchDaemons/CheckCapacity.sh
>sudo launchctl load /Library/LaunchDaemons/net.snowin.CheckCapacity.plist 

これで指定した時刻にメールが来る