Поиск

Газета FOSS News

16 ноября 2011

О газете
Архив
Авторам
Рекламодателям

 

Кабинет читателя

Вход в систему
Введите имя пользователя и пароль для входа в систему:

4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

Квоты в postfix'e

14.03.10 /

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

Удачи.


Автор: pilferst

По материалам:

Loading ...

Комментарии

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

* - необходимое для заполнения поле

*




Изображение CAPTCHA для предотвращения спама
Если слово непонятно, нажмите здесь..
*
*
Нет комментариев
 
© 2004-2009 Журнал "Root UA" - свидетельство СМИ: КВ №14786-3757Р
Газета "FOSS News" - свидетельство СМИ: ОД №1355-236-Р
При использовании материалов портала ссылка на Root.UA обязательна, для интернет-изданий – гиперссылка, не закрытая для индексации поисковыми системами.

sitenews