backup Gentoo
Скрипт архивации рабочей системы по расписанию.
Архивирует корень файловой системы с исключением не нужных папок и файлов.
Контроль количества файлов и запись действий в лог.
crontab
10 1 1 * * root ( /root/scripts/backup-gentoo >> /home/backup/backup-gentoo.log 2>&1 )
/root/scripts/backup-ubuntu
#!/bin/bash SCRIPTNAME="backup Gentoo" ## !!! Директории слешами НЕ закрывать !!! BACKUPDIR="/home/backup/gentoo" ## Максимально число хранимых архивов MAXNUMBER=3 NOWDATE=`date '+%Y%m%d'` DOTNAME="\.tar\.gz" UID_ROOT=0 ## Сообщение по завершению выполнения function end_msg() { echo "========== `date '+%Y-%m-%d %H:%M'` END $SCRIPTNAME ==========" echo "" } ## Сообщение о начале выполнения echo "========== `date '+%Y-%m-%d %H:%M'` START $SCRIPTNAME ==========" ## Проверка прав if [ "$UID" -ne "$UID_ROOT" ]; then echo "Requires root privileges" end_msg exit 1 fi ## Проверка директорий if [ ! -d "$BACKUPDIR" ]; then echo -e "Directory does not exist:$BACKUPDIR" end_msg exit 1 fi ############### Начало архивации ################ ## --exclude= исключает файлы или директории echo "Процесс архивации ..." cd / && tar czpf $BACKUPDIR/backup-gentoo.$NOWDATE.tar.gz / --exclude=$BACKUPDIR/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* \ --exclude=/usr/portage/* --exclude=/usr/src/linux-* --exclude=/mnt/cdrom/* ## Squid #--exclude=/var/cache/squid/* ## OpenVZ ##--exclude=/vz/private/* --exclude=/vz/root/* ##### Контроль количества файлов ##### FILELIST=`ls $BACKUPDIR | sed -e '/[0-9]\{8\}'$DOTNAME'$/!d'` FILENAMES=`echo "$FILELIST" | sed -e 's/\(^.*\)\([0-9]\{8\}'$DOTNAME'$\).*/\1/g' | sort -u` for CURRENT in $FILENAMES; do # Получение списка дат для текущего архива на удаление TEMP1=`echo "$FILELIST" | sed -e '/\(^'$CURRENT'\)\([0-9]\{8\}\)\('$DOTNAME'$\)/!d' -e 's/\(^'$CURRENT'\)\([0-9]\{8\}\)\('$DOTNAME'$\)/\2/g' | sort -rn` TEMP1=`echo "$TEMP1" | sed -e '1,'$MAXNUMBER'd'` #Склеивание for TEMP2 in $TEMP1; do DELETELIST=`echo $CURRENT$TEMP2${DOTNAME//\\\/} && echo "$DELETELIST"` done DELETELIST=`echo "$DELETELIST" | sed -e '/^$/d'` done if [ -n "$DELETELIST" ]; then echo "========== Файлы будут удалены ==========" echo "$DELETELIST" fi for CURRENT in $DELETELIST; do rm $BACKUPDIR/$CURRENT done end_msg exit 0 # Расшифровка tar # z - сжатие .gz # с - создать архив # v - выводить процесс в консоль # p - сохранить права # f - файловый архив
Ротация логов
/etc/logrotate.d/backup.my
/home/backup/logs/*log { size 3M missingok }
Обсуждение