Skrypt do backupów na serwer FTP/SFTP

vps
Tagi: #<Tag:0x00007f14abcc3dc0>

#1

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

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 :stuck_out_tongue:

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

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 :slight_smile:


Jak zrobić automatyczną kopie serwera VPS
Tworzenie kopii zapasowej wyznaczonego folderu z cyklicznym powtarzaniem
Support
Rozważam serwer MC na VPS, budżet
#2

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?


#3

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ę :wink:


#4

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


#5

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.


#6

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!


#7

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 :wink:


#8

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


#9

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.


#10

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

Nie wiem czy działa, ale warto sprawdzić :wink:


#11

:scream: :joy: :heart:


#12

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


#13

Błąd rozwiązaliśmy:

Pewnie coś błędnie czytało.
Użyłem cudzysłowie i działa :smiley:


#14

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’).


#15

Przyda się. Czekam na opcje z SSH :wink:


#16

Również czekam, być może kupię jakieś konto SFTP w lvlup na backupy :wink:
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)? :stuck_out_tongue:


#17

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


#18

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ć.


#19

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 @Nioo - 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.


#20

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

find SCIEŻKA -mtime +ILOŚĆ_DNI -exec rm {} \;