Настроил квоты в 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;
Автор – Алексей Леонтьев