Задача: Надо организовать автоматический бэкап логов 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 дней (в минутах).