Skrypt do backupów na serwer FTP/SFTP

Tagi: #<Tag:0x00007f13926f3310>

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:

4lajki

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?

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:

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

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.

2lajki

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!

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:

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

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.

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

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

2lajki

:scream: :joy: :heart:

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

Błąd rozwiązaliśmy:

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

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

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

1lajk

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:

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

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

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.

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

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