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