Установка скрипта резервного копирования

Перед началом работы нам нужно установить пакет, который позволяет работать с яндекс диском прямо с сервера. Ссылка на Github https://github.com/abbat

Ссылка для установки пакета на ваш сервер вот Ссылка для установки

Или можете просто выполнить вот эти команды (они актуальны для CenOS 7)

cd /etc/yum.repos.d/
wget https://download.opensuse.org/repositories/home:antonbatenev:ydcmd/CentOS_7/home:antonbatenev:ydcmd.repo
yum install ydcmd

Теперь, после того как приложение установлено, нам нужно получить токен. Вначале запускаем команду:

  ydcmd token

Получаем адрес который надо открыть в браузере и авторизоваться вашей учетной записью (ну или той записью, куда вы будете сохранять архивы). После предоставления доступа приложению вы получите код, который надо использовать в этой же команде:

  ydcmd token вашкод

Вместо слова "ваш код" вы вбиваете полученный от яндекса код. После этого команда выдаст вам OAuth токен, который вам будет нужен для работы с приложением.

Теперь создаем в той папке, где будет располагаться ваш скрипт, файл конфигурации. Он имеет имя .ydcmd.cfg и обычно выглядит так:

[ydcmd]
token   = Asdf4447qhxLhcAAIqssVSQhdsdduaftK2lHfLY
verbose = yes

Здесь надо будет подставить тот OAuth токен, который вы получили на предыдущем шаге.

Самое время проверить, что мы все сделали правильно и получили доступ к яндекс диску. Давайте наберем команду и посмотрим что получится:

ydcmd info
   Used: 45M (0%)
   Free: 19.96G
  Total: 20G

Как видим, мы получили информацию по нашему диску и значит все предыдущие шаги выполнили верно и все получилось. Если информации о диске нет - значит читайте внимательно ошибочные сообщения и смотрите что не так.

Сам скрипт резервного копирования вот:

#!/bin/bash

echo start
DATE=`/bin/date '+%Y.%m.%d'`
USER=$1
DIR=/var/www	
DIR_SITES=html

D=`date +%j`
	case $USER in
		all)
		  FILE=user_list_all
		  cnf=.ydcmd.cfg
		  DIR_BACKUP=/root/backup
		  echo "backup all"
		  ;;
		*)
		  FILE=user_list_important
		  cnf=.ydcmd.cfg
		  DIR_BACKUP=/root/backup
		  echo "backup important"
		  ;;
	esac

if ! [[ -d $DIR_BACKUP ]]; then
	mkdir $DIR_BACKUP
fi

/usr/bin/ydcmd --config=/root/$cnf mkdir disk:/backup/"$DATE"

while read line;do
	IFS=";"
	set -- $line
	USER=$1
	SITES=$2
	DB=$3
	DB_USER=$4
	DB_PASSWD=$5
	echo $SITES
	FILE_NAME=$DIR_BACKUP/"$DATE"_"$SITES".tar.gz
	#cd $DIR/$USER/$DIR_SITES
	cd $DIR/$DIR_SITES
	if [ -z "$DB" ]
	then
	   echo "базы нет"
	   tar -czf $FILE_NAME $SITES 
        else
	  mysqldump -u$DB_USER -p$DB_PASSWD $DB > $DB.sql
	  tar -czf $FILE_NAME $SITES $DB.sql 
	  rm ./$DB.sql
	fi
	/usr/bin/ydcmd --config=/root/$cnf put  $FILE_NAME disk:/backup/"$DATE"/"$DATE"_"$SITES".tar.gz
        rm $FILE_NAME
	#zip -T $FILE_NAME >> $TEMPLATE_EMAIL
	#echo "=============================================="  >> $TEMPLATE_EMAIL
	#chown $USER:$USER $FILE_NAME
done < /root/$FILE

exit 0

Его нужно загрузить на сервер и сделать исполняемым.

Для работы скрипту нужен текстовый файл с именем

user_list_important

Этот файл должен находиться в той же папке что и ваш скрипт.

Формат этого файла такой:

root;site1.ru;site1;root;pass
root;site2.ru;site2;root;pass

Где

site1.ru - это имя папки в которой находится ваш сайт номер.
site1 - это имя базы данных этого сайта. Если ее нет - оставляем пустым
root - это имя пользователя, который владеет этим сайтом
root - второй - это имя пользователя базы данных
pass - это пароль базы данных

Вот скрипт, который автоматически создает необходимый файл:

#!/bin/bash

echo -n "" > user_list_all_temp
for file in /var/www/html/*
do
if [ -d "$file" ]
then
  r="${file##*/}"
  db="${r}"
  if [[ "$db" == "000-default" ]]
  then
    continue
  fi

  if [ ! -z "`mysql  -uroot -p${MYSQLPASS} -qfsBe "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='$db'" 2>&1`" ];
  then
    echo "DATABASE $db EXISTS"
  else
    db=""
  fi

  echo "root;$r;$db;root;$MYSQLPASS" >> user_list_all_temp
fi

done

При небольшом изменении скрипта можно адаптировать его для структуры файлов, когда у каждого пользователя папки его сайтов хранятся отдельно.

Однако у меня сервер рассчитан на одного пользователя, поэтому скрипт выглядит так. Однако для нескольких пользователей возможности предусмотрены.

© Hika.su