Lab / VPS / Bash / DevOPS

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

Читайте также как настроить бекапы для баз данных