Квоты в postfix’e

Настроил квоты в postfix. Все ок. Привысил  юзер лимит по почте заданной в Ldap   новые письма не принимаются. НО встал вопрос как его об этом предупредить и оповестить заранее? В качестве imap/pop3 сервиса я использую dovecot на данном сервере. Но с ним у меня  что-то не сложилось. Не хотел отправлять оповещения и все тут. Наверное руки кривые(у создателей dovecot -)). И тут автор данного сайта посоветовал мне написать скрипт, что бы не мучаться с dovecot. Что я и сделал.

#!/bin/sh

for i in  `/usr/local/bin/ldapsearch -x -LLL -b «ou=mail,dc=0,dc=ru» | grep mail: | /usr/bin/cut -d : -f 2`;

do

quota=`/usr/local/bin/ldapsearch -x -LLL -b «cn=$i,ou=mail,dc=0,dc=ru» | /usr/bin/grep quota | /usr/bin/cut -d : -f 2`

quota_r=`/usr/bin/du -d0 -k /data/mail/$i | cut  -f 1 `

quota_r=`/bin/echo 1024*$quota_r | /usr/bin/bc -l `

quota_p=`/bin/echo  $quota_r/$quota | /usr/bin/bc  `

quota_p=`/bin/echo  $quota_p*100| /usr/bin/bc  `

if [ $quota_p -gt 100 ]

then /bin/echo «WARINING!!!!mailbox $i is full, Please kill user.» | /usr/sbin/sendmail -f quotaMAN@0.ru postmaster@0.ru

elif [ $quota_p -gt 90 ]

then /bin/echo «WARINING!!!!You have only 10 percent of free space on mailbox. Please!!!! Delete old mail. DELETE OR YOU CAN NOT RESEIVE MESSAGE!!!!» | /usr/sbin/sendmail -f quotaMAN@0.ru $i

elif [ $quota_p -gt 80 ]

then /bin/echo «!!!!You have only 20 percent of free space on mailbox. Please!!!! Delete old mail.» | /usr/sbin/sendmail -f quotaMAN@0.ru $i

elif [ $quota_p -gt 70 ]

then /bin/echo «You have only 30 percent of free space on mailbox.Please delete old mail» |/usr/sbin/sendmail -f quotaMAN@0.ru $i

fi

done;

На первой этапе лезем в LDAP и запрашиваем mail все пользователей. Уже в цикле для каждого пользователя. Запрашивается в ldap квота. Далее считаем реально занятое место в ящике и следующей строчкой умножаем число на 1024 так как du вернет нам размер в килобайтах.(Тут я ненмого лукавлю. В maildir пользователя так же будут системные файлы dovecot, которые тоже занимают место, но если писем наберется достаточно, то это будет погрешность. Что надо еще проверить) )

На следующей строчке ищем процент занятого места. Далее в зависимости от занятого места либо оповещаем пользователя, либо направляем письмо себе. Добавляем скрипт в cron и смотрим как отрабатывает.

Подумав еще ненмого,  решил выложить статистику по занятому месту каждого пользователя через apache. Написал еще один скрипт и поместил его в cron.

#!/bin/sh

/bin/date > /usr/local/www/quota

/bin/echo «————————————————————» >> /usr/local/www/quota

/bin/echo «mail —————— real space(bytes)—————quota space(byte)———percent employed spase» >> /usr/local/www/quota

for i in  `/usr/local/bin/ldapsearch -x -LLL -b «ou=mail,dc=0,dc=ru» | grep mail: | /usr/bin/cut -d : -f 2`;

do

quota=`/usr/local/bin/ldapsearch -x -LLL -b «cn=$i,ou=mail,dc=0,dc=ru» | /usr/bin/grep quota | /usr/bin/cut -d : -f 2`

quota_r=`/usr/bin/du -d0 -k /data/mail/$i | cut  -f 1 `

quota_r=`/bin/echo 1024*$quota_r | /usr/bin/bc `

quota_p=`/bin/echo  $quota_r/$quota | /usr/bin/bc -l  `

quota_p=`/bin/echo  $quota_p*100| /usr/bin/bc  `

/bin/echo «$i      $quota_r        $quota         $quota_p » >> /usr/local/www/quota

done;

Удачи.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *