FreeBSD/quota警告

ユーザへのquota警告

ユーザにtelnet/SSHなどの接続を許していない場合では、何かしらでどの程度の容量を使っていて、警告時には電子メールなどでお知らせをしてあげる必要があるでしょう。

#!/bin/sh
POSTMASTER=postmater
EXECDATE=`date +%Y.%m.%d|awk '{print $0}'`
quotafile=`/usr/sbin/repquota /usr | grep -v '\-\-' | grep grep -e days -e none -e : | \
sort -k1 | awk '{print $1}'`
TMPFILE1=/tmp/qalert1.$$
TMPFILE2=/tmp/qalert2.$$
TMPFILE3=/tmp/qalert3.$$

echo "To: $POSTMASTER"
echo "Subject: QUOTA Check Shell $EXECDATE"
echo
echo "--- QUOTA messenge Shell 1.0 By F.Kimura $EXECDATE ---"

for linefiles in ${quotafile}
do
AFTERDAY=`/usr/sbin/repquota /usr | grep -v '\-\-' | grep $linefiles |awk '{print $6}'`
echo -n $linefiles
echo -e "\t: " $AFTERDAY
echo "To: $linefiles" > $TMPFILE1
echo "From: postmaster@example.jp" >> $TMPFILE1
echo "X-Comment: EXAMPLE Warning mail" >> $TMPFILE1
echo "Reply-To: support@example.jp" >> $TMPFILE1
echo "Subject: [SUPPORT] Alert Messages From Administrator" >> $TMPFILE1
cat /tmp/qalert1.$$ > /tmp/qalert2.$$
sed -e 's!%%SENDDATE%%!'$EXECDATE'!g' \
-e 's!%%AFTERDAY%%!'$AFTERDAY'!g' \
/etc/QUOTA.Messages >> /tmp/qalert2.$$
/usr/local/bin/nkf -ej /tmp/qalert2.$$ > /tmp/qalert3.$$
/usr/sbin/sendmail $linefiles < $TMPFILE3
rm $TMPFILE1 $TMPFILE2 rm $TMPFILE3
done

echo '------------------------------------------------------'

exit 0 

なんか無理矢理だけどやりたいイメージはこんな感じ。/etc/QUOTA.Messages というファイルをEUCで作ったメッセージ文章としておけば、後はcrontabで日に1回以上動かしてあげれば、自動的に配信される(予定)です。

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
サービスご利用の皆様へ      【ディスク利用制限超過のお知らせ】

いつもサービスをご利用いただきありがとうございます。

さて、貴殿に割り当てているサーバ上のディスク容量が既に契約値を超
えた状態となっており %%AFTERDAY%% 以内に制限値以下にしていただ
けなかった場合には、電子メールなどの受信ができなくなりますのでご
注意ください。

契約量の変更やディスク上のファイルの削除方法にお聞きになりたい場
合には会員サポートまでお問い合わせください。


TO Custmers
FROM your service Administrator:

Grace Time: %%AFTERDAY%%

Your mailbox on the server is now more than "Soft Limits". 
So that you can continue to receive mail you need to remove
some messages from your mailbox.

%%SENDDATE%%
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 

イメージはこんな感じですので適当に文章等は作成してください。 サポートを行うこちら側に、誰にメールをしたのかを把握しておきたい気持ちはあるので、こんなのも。 後半部分は不要かも。/homeが溢れちゃって、/varにたまっている場合の量を見るために加えただけなので。 以下は実行のための一例です。お好きな形で行ってくれればいいです。

[/etc/crontab]

#minute hour mday month wday who command
05 17 * * * root /bin/sh /etc/quota/quota_check.sh 2>&1 /dev/null | /usr/sbin/sendmail postmaster 
[quota_check.sh]
#!/bin/sh
POSTMASTER=postmaster
EXECDATE=`date +%Y.%m.%d|awk '{print $0}'`

echo "To: $POSTMASTER"
echo "Subject: QUOTA Check Shell $EXECDATE"
echo
echo "--- QUOTA Check Shell 1.0 By F.Kimura $EXECDATE ---"

/usr/sbin/repquota /usr/home | grep -v '\-\-'

echo
echo "--- /var/mail file exist User List"
ls -la /var/mail | awk '{print $3 " " $5}' | grep -v " 0" | grep -v ^"root " | grep -v ^"foo "
echo

echo '------------------------------------------------------'