Заказчик заказал чтоб логи каждый день создавалась по следующими свойству, каждые 24 часов за прошлый день и ложись в пути ${dst}/2010/01/14 и в каждого первого числа создавалась за месяц по адресу ${dst}/2010/01/month. Было принято решение написать не большой sh скрипт и поместить его в cron
#!/bin/sh
#########################################################################################
# Created: Zakharchenko Andrey Ruslanovich
# Date: 2010.01.16
# Description: Скрипт генерации статистики squid по средствам sarg
#########################################################################################
#--- основные переменные
dst='/usr/local/www/data/stat'
sarg='/usr/local/bin/sarg'
create_dir='/bin/mkdir -p'
ddate='/bin/date'
check=0
#--- переменные для дат
current_month_number=`${ddate} "+%m"`
last_month_number=${current_month_number}
current_year_number=`${ddate} "+%y"`
last_year_number=${current_year_number}
current_day_number=`${ddate} "+%d"`
last_day_number=${current_day_number}
#--- составляем основотую команду
command="${ddate} -v${current_day_number}d -v${last_month_number}m -v${last_year_number}y -v-1d "
#--- если сегодня 2010.01.01
if ([ `${ddate} +%m` -eq 1 ] && [ `${ddate} +%d` -eq 1 ])
then
${create_dir} ${dst}/`$command +%Y`/`$command +%m`/"month"
${sarg} -d 01/`$command +%m`/`$command +%Y`-`$command +%d`/`$command +%m`/`$command +%Y` -o ${dst}/`$command +%Y`/`$command +%m`/`$command +%d`
${create_dir} ${dst}/`$command +%Y`/`$command +%m`/`$command +%d`
${sarg} -d `$command +%d`/`$command +%m`/`$command +%Y`-`$command +%d`/`$command +%m`/`$command +%Y` -o ${dst}/`$command +%Y`/`$command +%m`/`$command +%d`
check=1
#--- если сегодня первое число любого месяца кроме января
elif ([ `${ddate} +%d` -eq 1 ] && [ ${check} -ne 1 ] && [ `${ddate} +%m` -ne 1 ])
then
${create_dir} ${dst}/`$command +%Y`/`$command +%m`/month
${sarg} -d 01/`$command +%m`/`$command +%Y`-`$command +%d`/`$command +%m`/`$command +%Y` -o ${dst}/`$command +%Y`/`$command +%m`/`$command +%d`
${create_dir} ${dst}/`$command +%Y`/`$command +%m`/`$command +%d`
${sarg} -d `$command +%d`/`$command +%m`/`$command +%Y`-`$command +%d`/`$command +%m`/`$command +%Y` -o ${dst}/`$command +%Y`/`$command +%m`/`$command +%d`
#--- любое число кроме 1
elif [ `${ddate} +%d` -ne 1 ]
then
${create_dir} ${dst}/`$command +%Y`/`$command +%m`/`$command +%d`
${sarg} -d `${ddate} -v-1d +%d/%m/%Y`-`${ddate} -v-1d +%d/%m/%Y` -o ${dst}/`${command} +%Y`/`${command} +%m`/`${command} +%d`
fi
Захотелось автоматизировать создание баков на веб сервере. Для этого у всех учеток изменил описание на hosting, что можно было всех махом выдернуть из /etc/passwd. В итоге получился такой скрипт который не зависит от вновь заведенных сайтов. Он сам обработает новых товарищей.
#!/bin/sh
#########################################################################################
# Created: Zakharchenko Andrey Ruslanovich
# Date: 2009.09.16
# Description: Скрипт создания резервных копий сайтов отдельными арховами
#########################################################################################
#--- приветствие так сказать
/bin/echo "1. Backup hosting folders start. Time start: `/bin/date +%Y:%m:%d:%H:%M:%S`"
/bin/echo ""
#--- цикле перебираем /etc/passwd и получаем путь до домашних папок
for i in `cat /etc/passwd |awk -F: '$5~"hosting" {print($6)}'`;
#--- создаем целевую папку для архивов
do mkdir -p /var/files/backups/hosting/`date +%Y/%m/%d`&& \
#--- выводим информацию о том какой сайт архивируется и когда начал архивироваться
/bin/echo "Backup hosting folders: `/bin/echo $i` start. Time start: `/bin/date +%Y:%m:%d:%H:%M:%S`" && \
#--- список исключений которые не попадут в архив
tar --exclude *access.log --exclude *error.log --exclude tmp --exclude php-cgi.core \
#--- ну и собственно чего архивируем и куда кладем
-cjf /var/files/backups/hosting/`date +%Y/%m/%d`/`date +%Y.%m.%d.%H%M`-`\
echo $i |awk -F '/' '{print($5)}'`.tar.bz2 $i;
done
Вот такой получился маленький и удобный скриптец
Посмотрев на занятое пространство на почтовом сервере под 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
От решил все необходимы мне задачи
Так как порой какой-то невменяемы преподаватель появляется через пол года и просит ему по новой создать почтовый ящик и вернуть ему письма. Из-за этого я сначала архивирую mailbox, а только потом удаляю старый mailbox.