backup Ubuntu
Скрипт архивации рабочей системы по расписанию.
Архивирует корень файловой системы с исключением не нужных папок и файлов.
Контроль количества файлов и запись действий в лог.
crontab
10 1 1 * * root ( /root/scripts/backup-ubuntu >> /home/backup/backup-ubuntu.log 2>&1 )
/root/scripts/backup-ubuntu
#!/bin/bash SCRIPTNAME="backup ubuntu" # !!! Директории слешами НЕ закрывать !!! BACKUPDIR=/mnt/backup # Максимально число хранимых архивов MAXNUMBER=2 NOWDATE=`date '+%Y%m%d'` DOTNAME="\.tar\.bz2" 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 "Для работы требуются права root!" end_msg exit 1 fi # Проверка директорий if [ ! -d "$BACKUPDIR" ]; then echo "Директория BACKUPDIR=$BACKUPDIR не верна" end_msg exit 1 fi ############### Начало архивации ################ # --exclude= исключает файлы или директории echo "Процесс архивации ..." cd / && tar cjpf $BACKUPDIR/backup-ubuntu.$NOWDATE.tar.bz2 / --exclude=/proc/* --exclude=/dev/* --exclude=/sys/* --exclude=/tmp/* \ --exclude=/var/cache/apt/archives/*.deb --exclude=$BACKUPDIR/* ################################################## ### Контроль количества файлов ### 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
Обсуждение