Bash: Автоматический Backup для VPS сервера на Ubuntu
В этом уроке мы научимся писать bash script команды для автоматизации рутины. Давайте сделаем автоматический ежедневный бекап ваших сайтов из папки /var/www которые мы будем хранить в виде архивов .tar.gz в папке /backups/www
Скриптинг
Для начала давайте создадим файл с нашим скриптом по пути /scripts/backup.sh
mkdir scripts
cd scripts
touch backup.sh
Далее я привожу свой код на баш скрипте который легко конфигурировать:
DAYS_TO_KEEP
— колличество дней за которые мы храним бекап, а более старые удаляем
WWW_PATH
— исходный каталог откуда делаем бекапы
BACKUP_PATH
— сюда складываем архивы с бекапами
#!/bin/bash
#----------------------------------------
# OPTIONS
#----------------------------------------
DAYS_TO_KEEP=7 # 0 to keep forever
WWW_PATH='/var/www'
BACKUP_PATH='/backups/www'
#----------------------------------------
# Create the backup folder
if [ ! -d $BACKUP_PATH ]; then
mkdir -p $BACKUP_PATH
fi
# change into the web root directory
cd "$WWW_PATH"
if [ "$(pwd)" != "$WWW_PATH" ] ; then
echo "Failed to change directory to root of web path"
exit
fi
for website in * ; do
if [[ -d $website && ! -L "$website" ]]; then
echo "Found website folder: $website"
date=$(date -I)
tar -cvpzf $BACKUP_PATH/$date-$website.tar.gz $website
fi
done
# Delete old backups
if [ "$DAYS_TO_KEEP" -gt 0 ] ; then
echo "Deleting backups older than $DAYS_TO_KEEP days"
find $BACKUP_PATH/* -mtime +$DAYS_TO_KEEP -exec rm {} \;
fi
Теперь нужно сделать этот файл исполняемым:
sudo chmod +x backup.sh
Протестируем выполнение нашего скрипта:
sudo ./backup.sh
После выполнения в вашей папке бекапов должны появится архивы с текущей датой и эквивалентные названиям сайтов
Автоматическое копирование
Теперь нам осталось только автоматизировать этот процесс. Что бы не запускать каждый раз этот скрипт вручную давайте добавим его в задачи крона. Входим в редактирование крон таблицы:
sudo crontab -e
Добавляем выполнение нашего скрипта каждый день:
@daily sh /scripts/backup.sh >> /var/log/www-backup.log 2>&1
Логирование будет записываться в файл /var/log/www-backup.log
по желанию его можно удалить стерев из крон таблицы >> /var/log/www-backup.log 2>&1
Читайте также как настроить бекапы для баз данных