FreeBSD QandA 657

FreeBSD QandA

Q. ディレクトリの残り容量を自動で監視する方法はありますか。

A. cron とシェルスクリプトを使う方法があります。
   ここでは 30分ごとに /varの使用容量を調べ、 90%を越えたら自動で
   foo@my.domainあてにメールを出す例を説明します。

   rootアカウントで以下の作業を行います。
   ディレクトリを作成します。
   # mkdir /root/chkdisk

   以下の内容でシェルスクリプト /root/chkdisk/chk.sh を作成します。
   ------------------ cut here (start)----------------
   #!/bin/sh
   df -k | awk '$6=="/var"{ print }' | awk '$5 > "90%" { print }' \
     > /root/chkdisk/alarm ;

   if [ -s /root/chkdisk/alarm ]
   then
     cat /root/chkdisk/head > /root/chkdisk/work.txt
     cat /root/chkdisk/alarm >> /root/chkdisk/work.txt
     cat /root/chkdisk/work.txt | sendmail -t
     rm /root/chkdisk/alarm
     rm /root/chkdisk/work.txt
   fi

   exit 0
   ------------------ cut here (end)----------------

   このシェルスクリプトに実行権を設定します。
   # chmod +x /root/chkdisk/chk.sh

   以下の内容で /root/chkdisk/head を作成します。

   ------------------ cut here (start)----------------
   To: foo@my.domain
   Subject: Check the space on /var, please.
   -----
   このメールは cronにより自動で発送されました。
   /var の残り容量が減ってきましたので確認してください。
   ------------------ cut here (end)----------------

   つぎに /etc/crontab を編集して次の 3行を追加します。
   最後の行の意味は、30分ごとに上記で説明した chk.shを rootアカウントで
   実行することです。
   ------------------ cut here (start)----------------
   # 
   # check disk space on /var
   */30	*       *       *       *       root	/root/chkdisk/chk.sh
   ------------------ cut here (end)----------------

   /etc/crontabを編集すると cronを起動し直さなくても数分の内にシステムが
   変更を認識します。

   以上で設定が終りました。
   もし、/varでなく別のディレクトリを監視したい場合は上記で作成したファイル
   中の '/var' をコマンド df -k の結果の 6番目の文字列と置き換えてください。
   例えば以下の例のように /home/foo を監視したいなら
   '/var' を '/usr'に置き換えます。
   % df -k /home/foo
   Filesystem   1K-blocks     Used    Avail Capacity  Mounted on
   /dev/wd0s2f     595623   361235   186739    66%    /usr

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。