Skrypt do backupów na serwer FTP/SFTP

Zombie
vps
DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Skrypt do wykonywania backupów

Według regulaminu usługi serwer VPS, pkt. 6.1.2:

Użytkownik jest zobowiązany wykonywać w sposób regularny kopie danych przechowywanych w Usłudze;

więc przychodzę z odsieczą :slight_smile:

Oto prosty skrypt do wykonywania kopii zapasowych na zewnętrzny hosting z dostępem FTP/SFTP (przykładowo wystarczy w2.lvlup.pro).

Informacja

Jeżeli wykonujesz wszystkie te polecenia na koncie root, przedrostek sudo jest niepotrzebny.

Co trzeba zainstalować?

Dużo skrypt nie wymaga:

sudo apt install tar gzip ftp cron

Konfiguracja

Aby skonfigurować skrypt musimy otworzyć go za pomocą programu np. Notepad++ (w Windows) lub vim (w Linux) Następnie widzimy następujący obraz:

image|603x444

W polu host piszemy adres IP hostingu FTP - przykładowo w2.lvlup.pro W polu username wpisz swoją nazwę użytkownika (subkonto z w2.lvlup.pro będzie posiadało małpę, np. andrzej@mojadomena.pl) W polu password wpisz swoje hasło - najlepiej, aby nie zawierało znaków typu " czy '. W polu path wpisz folder (tylko jeden, niestety), a prawidłowo dokładną ścieżkę np. /home/andrzej/ W polu partition wpisz "adres" partycji dysku W polu maxusage wpisz maksymalny limit zajętości dysku - na pełnym nie zrobimy backup'u 😛

Automatyczne wykonywanie się skryptu

Musimy przenieść skrypt w miejsce dla wszystkich skryptów/aplikacji. Wykonaj to tak:

sudo mv backup.sh /usr/bin/

Następnie musimy nadać uprawnienia do wykonywania skryptu:

sudo chmod +x /usr/bin/backup.sh

Teraz musimy edytować crona przy pomocy:

sudo crontab -e

Teraz musimy wybrać swój ulubiony edytor - wpisujemy jakąś cyferkę. Moim ulubionym edytorem jest vim. Teraz dodajemy zadanie do cron'a:

0 7 * * * sync; bash /usr/bin/backup.sh

Po dodaniu tej linijki, zapisujemy plik. Skrypt będzie wykonywał się codziennie o 7:00 (rano). Możemy to zmienić według własnego

Wygląd mojego przykładu: image|366x24

Zapisujemy i gotowe.

Ręczne wykonywanie skryptu

Jeżeli ktoś potrzebuje zrobić backup raz na tydzień, może to zrobić w cron'ie lub ręcznie. Wtedy wystarczy uruchomić skrypt normalnie.

Metoda krótsza

sudo bash backup.sh

Metoda dłuższa

Musimy nadać uprawnienia do uruchomienia:

sudo chmod +x backup.sh

A następnie uruchamiamy:

sudo ./backup.sh

Download

Skrypt znajduje się w repozytorium. Bezpośredni link: klik

Pozdrawiam :)

Jebanany
Jebanany
8 lat temu

Myślę, że warto nawet katalog do tymczasowego pakowania /tmp/backup/ dodać do zmiennych, ale domyślnie wpisać tę ścieżkę.

Pomyśl też o możliwości wyświetlania każdego kroku. W sensie, po każdej operacji echo aktualnie ukończonego zadania.

Może jeszcze sprawdzenie czy jest odpowiednia ilość miejsca na dysku na spakowanie plików?

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Dzięki za pomysły, co do sprawdzania dysku, mam gotowy skrypt, ale muszę go przetestować, czy nie ma w nim błędów. Postaram się na dniach opublikować aktualizację ;)

anon10657637
anon10657637
8 lat temu

Wsparcie SSH, zmień trzymanie kodu na jakiś VCS, to co @Jebanany napisał i będzie git 😛

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Co do SSH, to zrobił bym "gałąź" - w sensie dodałbym jakiś argument np. -ssh. Ogólnie mam plan usunąć konfigurację, a dodać argumenty czy coś takiego.

Timo
Timo Moderator forum.lvlup.pro
8 lat temu

Connected to w2.lvlup.pro. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 8 of 50 allowed. 220-Local time is now 20:06. Server port: 21. 220-This is a private system - No anonymous login 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. 331 User ts3@moja-domena-w-direct-admin.pl OK. Password required 530 Login authentication failed Login failed. Local directory now /tmp/backup local: 2018-01-23_20-06-34.tar.gz remote: 2018-01-23_20-06-34.tar.gz 530 You aren't logged in ftp: bind: Address already in use 221-Goodbye. You uploaded 0 and downloaded 0 kbytes. 221 Logout. Kopia zostala wykonana!

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Hmmm... wygląda na błędny login lub/i hasło - spróbuj się zalogować z innego konta - sprawdź czy nie wdała się gdzieś spacja ;)

Timo
Timo Moderator forum.lvlup.pro
8 lat temu

Zapewniam cię, że hasło jest poprawne i login też. Spróbuję na koncie głównym - bez @ w loginie.

Timo
Timo Moderator forum.lvlup.pro
8 lat temu

Przy łączeniu przez konto główne poprawnie wrzuciło pliki. Miałem kiedyś taki skrypt, który nie działał przy korzystaniu z @ w loginie - do w2.

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Spróbuj dodać cudzysłów. Przykład: "nazwa@domena.pl" ;)

Nie wiem czy działa, ale warto sprawdzić ;)

Timo
Timo Moderator forum.lvlup.pro
8 lat temu

😱 😂 ❤️

Jebanany
Jebanany
8 lat temu

Timo:

530 Login authentication failed

FTP nie oszukuje, coś zostało błędnie podane.

Timo
Timo Moderator forum.lvlup.pro
8 lat temu

Błąd rozwiązaliśmy:

DBanaszewski:

Spróbuj dodać cudzysłów.

Przykład: "nazwa@domena.pl" 😉 Pewnie coś błędnie czytało. Użyłem cudzysłowie i działa :D

Toranktto
Toranktto
8 lat temu

Według mnie warto zmienić shebang na "#!/usr/bin/env bash" z racji tego że na Unixach bash instalowany jest domyślnie w innej lokalizacji (przykładowo w Solarisie '/usr/bin/bash', w NetBSD '/usr/pkg/bin/bash' a we FreeBSD i HP-UX - '/usr/local/bin/bash').

MTGmati
MTGmati
8 lat temu

Przyda się. Czekam na opcje z SSH 😉

DoreK
DoreK α-tester v3
8 lat temu

Również czekam, być może kupię jakieś konto SFTP w lvlup na backupy ;) Mam też pytanie - w proxmox zauważyłem pewien przycisk do utworzenia kopii. Jak on działa i czy w ogóle działa (nie miałem okazji tego sprawdzić jeszcze)? :P

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Nie, nie działa 😕 (Znaczy się działa, ale nie ma miejsca na tegp typu kopie)

helczyna
helczyna
8 lat temu

Z tego co przeczytałem to kopie tworzą się bez limitu. Mój dysk na w2.lvlup.pro na ten przykład jest mały. Warto dodać limit kopii zapasowych i usuwać starsze kopie. Ja z tym nie będę nadążać.

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Nowa aktualizacja!

Dzisiaj wyszła nowa, mała aktualizacja.

Changelog:

  • usunięto zbędne linie kodu
  • dodano mały system sprawdzania zajętości dysku
  • dodano nowe opcje w konfiguracji

Zmienna partycja odpowiada za adres partycji (np. /dev/vda1) - wymagane jest do sprawdzenia zajętości dysku. Adres można uzyskać poprzez wpisanie komendy df. Adres znajduje się w lubryce System plików lub File system (zależy od wybranego języka). Owa partycja musi być zamontowana na / (lubryka zamont. na lub monuted on).

Zmienna maxprocent odpowiada za maksymalną ilość % zajętości dysku. Powyżej danej liczby % zajętości dysku, kopia nie wykona się.

Ogólem dodano propozycję wyświetlania każdego kroku i sprawdzania odpowiedniej ilości miejsca na dysku @Jebanany'ego.

Co do opcji z SSH jest jeszcze w trakcie dopracowywania - będzie opierała się na scp lub na sftp.

Co do propozycji @helczyna - nie ma takiej możliwości - możesz sam na hostingu WWW utworzyć zadanie cron, które będzie usuwało starsze kopie. Obecnie sam po prostu kasuję kopie po 3 dniach.

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro
8 lat temu

To ja tylko podrzucę przykładową komendę na czyszczenie:

find SCIEŻKA -mtime +ILOŚĆ_DNI -exec rm {} \;
DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Nie jest to komenda na czyszczenie poprzez protokół FTP ;) Co do opcji z SSH to mi się akurat przyda ;)

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro
8 lat temu

Ktoś używa jeszcze ftp?

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Ten skrypt ;)

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Nowa aktualizacja!

Przed chwilą wydałem aktualizację :)

Changelog:

  • dodano możliwość wgrywania backup'ów na serwer SSH
  • usunięto zbędny kod

Teraz, aby przesłać kopię na serwer SSH musimy dodać dopiskę -s lub --ssh (przykład: sudo backup.sh -s). Jeżeli chcesz wysłać ową kopię na serwer FTP musimy dodać dopiskę -f lub --ftp (przykład: sudo backup.sh -f).

Jeżeli ma ktoś problemy lub pytania to zapraszam do rozmowy tutaj lub na priv ;)

UWAGA! Skrypt nie działa na systemach innych niż Ubuntu, Debian i inne, debianopochodne (wszystkie systemy, które używają apt.)

Jebanany
Jebanany
8 lat temu

Jeśli masz serwer na backupy, to tańsze rozwiązania nie udostępniają protokołu SFTP.

anon10657637
anon10657637
8 lat temu

A ten jak zwierzę dalej trzyma na swoim hoście, a nie jak człowiek w jakimś VCS by móc obserwować postęp i zmiany w kodzie.

Toranktto
Toranktto
8 lat temu

Nie uważasz że używanie systemu kontroli wersji do jednoplikowego, prostego skryptu to jak wyskakiwanie z karabinem maszynowym do muchy? :P

anon10657637
anon10657637
8 lat temu

Nie.

DBanaszewski
DBanaszewski α-tester v3
8 lat temu

Skrypt został przeniesiony na Github w celu zapewnienia 99.(9)% dostępności (zawsze może Github wywalić :kappa:) - https://goo.gl/QTTZVA.

Wersja wget:

wget https://goo.gl/QTTZVA -O backup.sh
helczyna
helczyna
8 lat temu

Screenshot 2018-02-23 23-35-59|690x112 Github ci wywalić...

DBanaszewski
DBanaszewski α-tester v3
8 lat temu
wget https://goo.gl/fgiPKN -O backup.sh

;)

Timo
Timo Moderator forum.lvlup.pro
8 lat temu

Zły adres twojej strony na samej górze pliku ;)

Timo
Timo Moderator forum.lvlup.pro
7 lat temu

Link nie działa :thinking:

Qmis
Qmis
7 lat temu

https://gist.github.com/DBanaszewski/96066b6b869af6a9c4dec90c2cd3bbe3 @DBanaszewski co tu trzeba dokładnie podać partycja="dokladny_adres_partycji (np./dev/vda1)" #tutaj wpisz odpowiedni adres partycji (sprawdzisz to przy pomocy df -h) adres partycji tego serwera co będą robione kopie zapasowe czy adres partycji serwera do kopi

DBanaszewski
DBanaszewski α-tester v3
7 lat temu

Qmis:

adres partycji tego serwera co będą robione kopie zapasowe czy adres partycji serwera do kopi

Tutaj musisz wpisać adres danej partycji, z której będą robione kopie zapasowe ;)

DBanaszewski
DBanaszewski α-tester v3
7 lat temu

Aktualizacja

Poradnik został zaktualizowany, kod został przeniesiony do mojego repozytorium (link).

DBanaszewski
DBanaszewski α-tester v3
7 lat temu

Aktualizacja

Nastąpiły pewne zmiany, kod wylądował w repozytorium, wszystko jest ok, dalej działa 😛

nitromaxpl
nitromaxpl
7 lat temu

Tego wlanie szukalem :)

Glupikocz
Glupikocz
7 lat temu

(wpis wycofany przez autora, zostanie automatycznie usunięty za 24 godziny, chyba że zostanie oflagowany)

Glupikocz
Glupikocz
7 lat temu

Mam pytanie bo do Crontab -e dodałem linijkę 0 5 * * * sync; bash /usr/bin/backup.sh

i skrypt się nie wykonuje o 5 rano każdego dnia ktoś coś?

Dudix
Dudix
6 lat temu

czy backup moze byc na jednym serwerze vps?

JanekJaran
JanekJaran
6 lat temu

Chcesz robić lokalne kopie zapasowe? To traci sens. Kopie powinny być zdywersyfikowane, najlepiej w różnych hostingach i centrach danych.

Dudix
Dudix
6 lat temu

chce robic backup serwera minecraft nie calego vps :)

DBanaszewski
DBanaszewski α-tester v3
6 lat temu

No inaczej tego backupu nie zrobisz, bo jeżeli backupowanym folderem będzie / = nieskończona pętla backupowania (będzie pakowało backup, który się będzie cały czas powiększał).

Ten skrypt wykonuje tylko kopię zapasową danego folderu.

Nikox
Nikox
6 lat temu

Da się użyć niestandardowego portu FTP?

psycho
psycho
6 lat temu

Prawdopodobnie wystarczy lekko przerobić skrypt, aby łączył się do odpowiedniego portu.

Axerr
Axerr
6 lat temu

Czy skrypt posiada opcję dodania klucza ssh przy logowaniu?

DBanaszewski
DBanaszewski α-tester v3
6 lat temu

Nie, nie ma, ale postaram się dodać taką funkcję wkrótce :slight_smile:

Dudix
Dudix
5 lat temu

popraw linki

DBanaszewski
DBanaszewski α-tester v3
5 lat temu

Skrypt już jest porzucony. Może by i działał, ale na pewno przestał być przeze mnie wspierany ;)

Link znalazłem, to podrzucam: https://gist.github.com/dbanaszewski06/64ef9b8f100e030d271230d73f47658d

KrEdEnS
KrEdEnS Moderator Freebies
5 lat temu

DBanaszewski:

Skrypt już jest porzucony. Może by i działał, ale na pewno przestał być przeze mnie wspierany 😉