Категорії
Mail systems Misc, staff, other

[postfix] Оповещение при превышении квоты

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

#!/bin/sh
for i in  `/usr/local/bin/ldapsearch -x -LLL -b "ou=mail,dc=0,dc=com" | grep mail: | /usr/bin/cut -d : -f 2`;
do

quota=`/usr/local/bin/ldapsearch -x -LLL -b "cn=$i,ou=mail,dc=0,dc=com" | /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.com postmaster@0.com
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.com $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.com $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.com $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=com" | grep mail: | /usr/bin/cut -d : -f 2`;
do

quota=`/usr/local/bin/ldapsearch -x -LLL -b "cn=$i,ou=mail,dc=0,dc=com" | /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 адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP