backup Ubuntu
Скрипт архивации рабочей системы по расписанию.
Архивирует корень файловой системы с исключением не нужных папок и файлов.
Контроль количества файлов и запись действий в лог.
10 1 1 * * root ( /root/scripts/backup-ubuntu >> /home/backup/backup-ubuntu.log 2>&1 )
#!/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
Обсуждение