Перед началом работы нам нужно установить пакет, который позволяет работать с яндекс диском прямо с сервера. Ссылка на 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
При небольшом изменении скрипта можно адаптировать его для структуры файлов, когда у каждого пользователя папки его сайтов хранятся отдельно.
Однако у меня сервер рассчитан на одного пользователя, поэтому скрипт выглядит так. Однако для нескольких пользователей возможности предусмотрены.