Настроил квоты в 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;
Удачи.