Архивирование и удаление mailbox от удаленных почтовых e-mail
20 Май 2009
Посмотрев на занятое пространство на почтовом сервере под mailbox для почтовых ящиков нескольких доменов. Я понял, что пора наконец сделать инструмент для удаления не используемых mailbox после удаления пользователей из базы e-mail. Раньше, не было в этом необходимости, но место стало поджимать и настало время разобраться. На помощь пришел bash. На нем я написал вот такой маленький скрипт.
#!/bin/sh
#########################################################################################
# Created: Zakharchenko Andrey Ruslanovich
# Date: 2009.05.20
# Description: Поиск mailbox для удаленных почтовых ящиков из базы mysql.
# Производится поиск, архивирование в папку хранения и удаление.
# исходного mailbox
#########################################################################################
#--- объявляем переменные
i=0
domaindir="/var/files/mail"
mailolddir="/var/files/mailold"
#--- проверяем существование архивной папки
if ! test -d ${mailolddir}.
then
mkdir ${mailolddir}
fi
#--- составляем листинг доменов
for domain in $( ls ${domaindir} ).
do
#--- создаем в архивной папке доменные папки
if ! test -d ${mailolddir}/${domain}
then
mkdir ${mailolddir}/${domain}
fi
#--- просматриваем содержимое доменных папок и ищем соответствие mailbox в mysql базе
for email in $( ls ${domaindir}/${domain} )
do
tmp=`mysql --user=root -p --database=mail-server --execute="select username.
from users where username='${email}' " | awk '$1!="username"'`
#--- если пользователя нету в базе, то архивируем mailbox и удаляем исходную папку
if test -z ${tmp}
then
TMP=`let "i+=1"`
echo -e "Archiving item.... \t domain: $domain mailbox: ${email}"
tar -jcf ${mailolddir}/${domain}/${email}.tar.bz2 ${domaindir}/${domain}/${email}
echo -e "Remove item.... \t domain: ${domain}, mailmox: ${email}"
rm -rdf ${domaindir}/${domain}/${email}
fi
done
done
echo -e "It is processed mail boxes \t $i"
#--- ищем архивные ящики которые хранятся больше полугода и удаляем их
find ${mailolddir} -not -newerct '11 week ago' -and -type f -delete
#########################################################################################
# Created: Zakharchenko Andrey Ruslanovich
# Date: 2009.05.20
# Description: Поиск mailbox для удаленных почтовых ящиков из базы mysql.
# Производится поиск, архивирование в папку хранения и удаление.
# исходного mailbox
#########################################################################################
#--- объявляем переменные
i=0
domaindir="/var/files/mail"
mailolddir="/var/files/mailold"
#--- проверяем существование архивной папки
if ! test -d ${mailolddir}.
then
mkdir ${mailolddir}
fi
#--- составляем листинг доменов
for domain in $( ls ${domaindir} ).
do
#--- создаем в архивной папке доменные папки
if ! test -d ${mailolddir}/${domain}
then
mkdir ${mailolddir}/${domain}
fi
#--- просматриваем содержимое доменных папок и ищем соответствие mailbox в mysql базе
for email in $( ls ${domaindir}/${domain} )
do
tmp=`mysql --user=root -p --database=mail-server --execute="select username.
from users where username='${email}' " | awk '$1!="username"'`
#--- если пользователя нету в базе, то архивируем mailbox и удаляем исходную папку
if test -z ${tmp}
then
TMP=`let "i+=1"`
echo -e "Archiving item.... \t domain: $domain mailbox: ${email}"
tar -jcf ${mailolddir}/${domain}/${email}.tar.bz2 ${domaindir}/${domain}/${email}
echo -e "Remove item.... \t domain: ${domain}, mailmox: ${email}"
rm -rdf ${domaindir}/${domain}/${email}
fi
done
done
echo -e "It is processed mail boxes \t $i"
#--- ищем архивные ящики которые хранятся больше полугода и удаляем их
find ${mailolddir} -not -newerct '11 week ago' -and -type f -delete
От решил все необходимы мне задачи
Так как порой какой-то невменяемы преподаватель появляется через пол года и просит ему по новой создать почтовый ящик и вернуть ему письма. Из-за этого я сначала архивирую mailbox, а только потом удаляю старый mailbox.

.gif)
