Автоматический бэкап логов apache и PHP

Задача: Надо организовать автоматический бэкап логов apache + PHP, архивацию и удаление старых архивов.

Пишем скрипт на bash:

#определяем входящие параметры
SOURCE=$1
DESTIN=$2
MASK=$3
REMSOURCE=$4
REMBACKUPSINMINUTES=$5
#Текущая дата + время (без секунд)
DATE=`date "+%Y-%m-%d-%H%M"`
#Перебираем файлы логов
ls ${SOURCE}${MASK} | while read LOGFILE; do
	#Создаем архив в DESTIN для каждого найденного лога в указанной SOURCE директории
	tar -czvf ${DESTIN}`echo ${LOGFILE} | sed "s%${SOURCE}%%g"`-${DATE}.tgz ${LOGFILE}
	#Удаляем лог, если передан соответствующий параметр
	if [ ${REMSOURCE} = "yes" ]; then
		rm ${LOGFILE}
	fi
done
#Удаляем старые архивы, если передан соответствующий параметр
if [ ${REMBACKUPSINMINUTES} ]; then
	#Находим дату+время ранее на N минут
	REMBACKUPSINMINUTES=`date -v-"${REMBACKUPSINMINUTES}"M "+%Y%m%d%H%M"`
	#Если такие архивы есть - удаляем
	ls ${DESTIN}*.tgz | while read TGZFILE; do
		if [ `echo ${TGZFILE} | sed "s%${DESTIN}%%;s%[^0-9]*%%g"` -lt ${REMBACKUPSINMINUTES} ]; then
			rm ${TGZFILE}
		fi
	done
exit;

Итак, нам всего лишь надо теперь сделать соответствующую запись в /etc/crontab, и наши логи будут автоматически архивироваться и складироваться в нужной нам директории, а старые будут удаляться.

Подробнее о том, как работать с cron-ом здесь.

Для этого надо вызвать скрипт, который мы выше описали, с такими параметрами:

backup.sh SOURCE DESTIN MASK REMSOURCE REMBACKUPSINMINUTES – где: SOURCE – директория, где хранятся логи, например /www/log/; DESTIN – директория, куда должны складироваться архивы логов, например /www/log/ да, это тоже возможно; MASK – маска файлов логов, которые будут искаться, например *.log, таким образом будут искаться файлы *.log в директории /www/log/; REMSOURCE – удалять ли фалы логов после манипуляций с ними, например "yes" или "no"; REMBACKUPSINMINUTES – количество минут от текущего времени, которые будут применяться при поиске файлов архивов, которые надо удалить, устаревшие, например, 7200 – 5 дней (в минутах).

Leave a Reply