Wszystko co dotyczy tworzenia stron WWW.
Awatar użytkownika

winuser

Zasłużony użytkownik
Posty: 971
Rejestracja: 29 sie 2013, 12:15
    Windows 7 Chrome

Post12 lut 2016, 11:53

Cześć, chcę sobie robić automatyczny backup zawartości swojego VPS i z automatu wysyłać do na DropBoxa. Znalazłem skrypt, który nawet działa, bo backup robi (plik siedzi w tempie) ale nie potrafi się zalogować do Dropboxa:

Kod: Zaznacz cały

#!/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 http://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"

przy próbie zalogowania wyrzuca Failed!. Pomożecie poprawić ten skrypt tak, aby logowanie przebiegało poprawnie ?
Mój PC:
Intel Core i3-4170 @3.70GHz + SilentiumPC SpartanPro | MSI B85M-G43 | Zotac GeForce GTX 750 Ti 1GB | 8 GB RAM Crucial Ballistix Sport 1600Mhz 9-9-9-24| Patriot Blaze SSD 120 GB | Windows 10 Pro 1703 x64
Laptop:
Lenovo IdeaPad P580 | Intel Core i5 3210M @ 3.1 GHz| nVidia GeForce GT630M | 16GB RAM Kingston | LiteON LCS 128-L9S 128GB | Windows 7 Pro x64
Apple iPhone 5s | Apple A7 @1.3 GHz | PowerVR SGX543MP3 | 1GB RAM | 16GB PAMIĘCI | iOS 10.3
Inne telefony:

Spoiler: pokaż
Apple iPhone 5 | Apple A6 @1.3 GHz | PowerVR G6430 | 1GB RAM | 32GB PAMIĘCI | iOS 10.3
Nokia N9 | TI OMAP3630 @1,1GHz OC | PowerVR SGX-530 | 1GB RAM LPDDR | 16 GB PAMIĘCI | MeeGo 1.2 Harmattan
Lumia 520 | Qualcomm MSM8227 @ 1GHz | Qualcomm Adreno 305 | 512MB RAM | 8GB PAMIĘCI| WP 8.1 GDR2

Awatar użytkownika

PisarzKsiazkowicz

Moderator
Posty: 2195
Rejestracja: 27 sty 2010, 7:53
    Windows 10 Opera

Post12 lut 2016, 14:13

Nie sądziłem, że kiedykolwiek to powiem, ale moja niedokończona Orphilia może Ci tutaj pomóc.

Dlaczego ten skrypt nie działa? Bo używa jakiegoś mega starego API, to jest z czasów gdy jeszcze dało się zalogować bez logowania się na stronie i autoryzowania tego ręcznie itd. Wiem, bo sam wprowadzałem zmiany w Orphilii kiedyś by to naprawić. I szczerze mówiąc, jeśli nie przeszkadza Ci używanie Pythona, to śmiało mógłbyś wywalić te wszystkie fragmenty tego skryptu, bo naprawianie tego to trochę strata czasu.

https://github.com/ksiazkowicz/orphilia-dropbox

Orphilia ogólnie świetnie sobie radzi z synchronizacją w jedną stronę, w drugą też, ale równocześnie nie koniecznie. Ale hej, przecież Ty więcej niż w jedną stronę nie musisz tego robić.

Zaciągasz sobie gdzieś to repo. Możesz zrobić virtualenva ale nie musisz, w sumie fajnie jest nie mieć burdelu z zależnościami w Pythonie. A, koniecznie Python 2.7, bo jak wszystkie dzieci dobrze wiedzą, 3.x nikt nie używa. Wykonujesz kolejno:

Kod: Zaznacz cały

pip install -r requirements.txt
python orphilia.py --configuration

Dostaniesz linka w konsoli, kopiujesz go i wklejasz do przeglądarki na desktopie, logujesz się, autoryzujesz dostęp i w sumie już prawie z głowy. Teraz przerób skrypt by wrzucało te backupy do folderu dropboksa który podałeś Orphilii. A potem już z górki.

Kod: Zaznacz cały

python orphilia.py --monitor

To odpala moduł monitora. Możesz to zrobić na osobnym screenie czy czego Ty tam używasz. Generalnie zostawisz to w tle i będzie się robić. Jak przestanie to daj znać, będziesz jakoś tak drugim użytkownikiem tego chyba. :D
ObrazekObrazek

Awatar użytkownika

winuser

Zasłużony użytkownik
Posty: 971
Rejestracja: 29 sie 2013, 12:15
    Windows 7 Chrome

Post27 maja 2016, 14:34

Na bazie tego skryptu zrobiłe sobie jakiś czas temu podobny, backupujący wszystko na Google Drive.
Spoiler: pokaż

Kod: Zaznacz cały

#!/bin/bash
BACKUP_SRC="/pliki"
BACKUP_DST="/var/backup"
MYSQL_SERVER="127.0.0.1"
MYSQL_USER="root"
MYSQL_PASS="haslo"
#
# plik z nazwa.
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tgz"

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


# upload do google drive
NOW=$(date +"%Y.%m.%d")
drive upload --file "/var/backup/$NOW.tgz"

#usuwa plik
rm /var/backup/*

Mam z nim jednak taki problem, że kopiuje każdą z baz danych do tego samego pliku, przez co ciężko potem wyłuskać stamtąd konkretną bazę. Pomyślałem, że go zmodyfikuję i ustawię, żeby robił kopię konkretnych baz, pakował je i wrzucał na GD. Zmodyfikowałem go w ten sposób:
Spoiler: pokaż

Kod: Zaznacz cały

#!/bin/bash
BACKUP_SRC="/pliki "
BACKUP_DST="/var/backup"
MYSQL_SERVER="127.0.0.1"
MYSQL_USER="root"
MYSQL_PASS="haslo"
#
# Stop editing here.
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tgz"

# Backup files.
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --databases blog  > "$NOW-baza1.sql"
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --databases test  > "$NOW-baza2.sql"
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --databases testowa  > "$NOW-testowa.sql"

tar -czvf "$DESTFILE" $BACKUP_SRC /var/backup/


# upload to google drive
NOW=$(date +"%Y.%m.%d")
drive upload --file "/var/backup/$NOW.tgz"

#usuwa plik
rm /var/backup/*

Problem w tym, że skrypt się zapętla i robi mi monstrualnie duży plik :P Pomożecie mi go poprawić, tak, aby robił to czego oczekuję ?
Mój PC:
Intel Core i3-4170 @3.70GHz + SilentiumPC SpartanPro | MSI B85M-G43 | Zotac GeForce GTX 750 Ti 1GB | 8 GB RAM Crucial Ballistix Sport 1600Mhz 9-9-9-24| Patriot Blaze SSD 120 GB | Windows 10 Pro 1703 x64
Laptop:
Lenovo IdeaPad P580 | Intel Core i5 3210M @ 3.1 GHz| nVidia GeForce GT630M | 16GB RAM Kingston | LiteON LCS 128-L9S 128GB | Windows 7 Pro x64
Apple iPhone 5s | Apple A7 @1.3 GHz | PowerVR SGX543MP3 | 1GB RAM | 16GB PAMIĘCI | iOS 10.3
Inne telefony:

Spoiler: pokaż
Apple iPhone 5 | Apple A6 @1.3 GHz | PowerVR G6430 | 1GB RAM | 32GB PAMIĘCI | iOS 10.3
Nokia N9 | TI OMAP3630 @1,1GHz OC | PowerVR SGX-530 | 1GB RAM LPDDR | 16 GB PAMIĘCI | MeeGo 1.2 Harmattan
Lumia 520 | Qualcomm MSM8227 @ 1GHz | Qualcomm Adreno 305 | 512MB RAM | 8GB PAMIĘCI| WP 8.1 GDR2

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość