Задать вопрос

Помогите пожалуйста поправить bash скрипт

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

Вот сам скрипт:

#!/bin/bash
DROPBOX_USER="Your Dropbox username"
DROPBOX_PASS="Your Dropbox password"
DROPBOX_DIR="Directory in your dropbox account to store the backups, e.g. /backups"
BACKUP_SRC="/home /var/www /var/git /etc /root"
BACKUP_DST="/tmp"
MYSQL_SERVER="127.0.0.1"
MYSQL_USER="root"
MYSQL_PASS="Your MySQL password"

#
# Stop editing here.
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tgz"

#
# Upload a file to Dropbox.
# $1 = Source file
# $2 = Destination file.
function dropboxUpload
{
#
# Code based on DropBox Uploader 0.6 from www.andreafabrizi.it/?dropbox_uploader
LOGIN_URL="https://www.dropbox.com/login"
HOME_URL="https://www.dropbox.com/home"
UPLOAD_URL="https://dl-web.dropbox.com/upload"
COOKIE_FILE="/tmp/du_cookie_$RANDOM"
RESPONSE_FILE="/tmp/du_resp_$RANDOM"

UPLOAD_FILE=$1
DEST_FOLDER=$2

# Login
echo -ne " > Logging in..."
curl -s -i -c $COOKIE_FILE -o $RESPONSE_FILE --data "login_email=$DROPBOX_USER&login_password=$DROPBOX_PASS&t=$TOKEN" "$LOGIN_URL"
grep "location: /home" $RESPONSE_FILE > /dev/null

if [ $? -ne 0 ]; then
echo -e " Failed!"
rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
exit 1
else
echo -e " OK"
fi

# Load home page
echo -ne " > Loading Home..."
curl -s -i -b "$COOKIE_FILE" -o "$RESPONSE_FILE" "$HOME_URL"

if [ $? -ne 0 ]; then
echo -e " Failed!"
rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
exit 1
else
echo -e " OK"
fi

# Get token
TOKEN=$(cat "$RESPONSE_FILE" | tr -d '\n' | sed 's/.*<form action="https:\/\/dl-web.dropbox.com\/upload"[^>]*>\s*<input type="hidden" name="t" value="\([a-z 0-9]*\)".*/\1/')

# Upload file
echo -ne " > Uploading '$UPLOAD_FILE' to 'DROPBOX$DEST_FOLDER/'..."
curl -s -i -b $COOKIE_FILE -o $RESPONSE_FILE -F "plain=yes" -F "dest=$DEST_FOLDER" -F "t=$TOKEN" -F "file=@$UPLOAD_FILE" "$UPLOAD_URL"
grep "HTTP/1.1 302 FOUND" "$RESPONSE_FILE" > /dev/null

if [ $? -ne 0 ]; then
echo -e " Failed!"
rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
exit 1
else
echo -e " OK"
rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
fi
}

# Backup files.
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --all-databases > "$NOW-Databases.sql"
tar cfz "$DESTFILE" $BACKUP_SRC "$NOW-Databases.sql"

dropboxUpload "$DESTFILE" "$DROPBOX_DIR"

rm -f "$NOW-Databases.sql" "$DESTFILE"
  • Вопрос задан
  • 3146 просмотров
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 7
MakeInstall
@MakeInstall
Запустите ./скрипт и выведите сюда результат ошибки.
Ответ написан
MakeInstall
@MakeInstall
DROPBOX_DIR=«Directory in your dropbox account to store the backups, e.g. /backups»

Сделайте Комменты правильно, иначе я буду думать, что тут ошибка.
Ответ написан
plin2s
@plin2s
IT, инженер
что-то не пойму где определяется $RANDOM или такая переменная есть по-умолчанию?
Ответ написан
@BrerBeer
Приветствую!
В коде смущает «собака» в параметре "file=@$UPLOAD_FILE". Не в этом ли беда?
Кстати, если целевая платформа позволяет, то для обмена можно задействовать Python-клиента Dropbox, тем самым сэкономив на сопровождение скрипта.
Ответ написан
Комментировать
@BearOff
Вы пишете результаты работы curl в $RESPONSE_FILE:
curl -s -i -b $COOKIE_FILE -o $RESPONSE_FILE

А потом проверяете, нет ли там «HTTP/1.1 302 FOUND»:
grep «HTTP/1.1 302 FOUND» "$RESPONSE_FILE" > /dev/null

Думаю, первым делом надо посмотреть, что же на самом деле находится в $RESPONSE_FILE после работы скрипта.
Ответ написан
Комментировать
@BrerBeer
Очевидно что причина в размере файла. Сам дропбокс сообщает, что лимит для такого метода 300 метров. Это подтверждается экспериментом с данным скриптом и «dd».
Ответ написан
Комментировать
rssdoor
@rssdoor
В этом (ну, или в похожем до степени смешения) скрипте обнаружилась неприятная особенность — он, собака луговая, благополучно отправляет бекапы в дропбокс, но всё это не синхронизируется. Т.е. если на сервере зачищать неактуальные архивы, то в дропбоксе всё это просто накапливается и со временем весьма дурно пахнет. Кто скажет, как придавить гадюку и излечить недуг?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы