DBanaszewski | 2020-11-23 14:17:57 UTC | #1
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).
Jeżeli wykonujesz wszystkie te polecenia na koncie root
, przedrostek sudo
jest niepotrzebny.
Dużo skrypt nie wymaga:
sudo apt install tar gzip ftp cron
Aby skonfigurować skrypt musimy otworzyć go za pomocą programu np. Notepad++ (w Windows) lub vim (w Linux)
Następnie widzimy następujący obraz:
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. [email protected])
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 :stuckouttongue:
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:
Zapisujemy i gotowe.
Jeżeli ktoś potrzebuje zrobić backup raz na tydzień, może to zrobić w cron’ie lub ręcznie. Wtedy wystarczy uruchomić skrypt normalnie.
sudo bash backup.sh
Musimy nadać uprawnienia do uruchomienia:
sudo chmod +x backup.sh
A następnie uruchamiamy:
sudo ./backup.sh
Skrypt znajduje się w repozytorium.
Bezpośredni link: klik
Jebanany | 2018-01-23 18:41:32 UTC | #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?
DBanaszewski | 2018-01-23 18:43:13 UTC | #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ę ;)
anon10657637 | 2018-01-23 18:49:59 UTC | #4
Wsparcie SSH, zmień trzymanie kodu na jakiś VCS, to co @Jebanany napisał i będzie git :stuckouttongue:
DBanaszewski | 2018-01-23 18:51:56 UTC | #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.
Timo | 2018-01-23 19:08:03 UTC | #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 [email protected] OK. Password required
530 Login authentication failed
Login failed.
Local directory now /tmp/backup
local: 2018-01-2320-06-34.tar.gz remote: 2018-01-2320-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 | 2018-01-23 19:10:53 UTC | #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 ;)
Timo | 2018-01-23 19:12:25 UTC | #8
Zapewniam cię, że hasło jest poprawne i login też.
Spróbuję na koncie głównym - bez @ w loginie.
Timo | 2018-01-23 19:13:44 UTC | #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.
DBanaszewski | 2018-01-23 19:16:12 UTC | #10
Spróbuj dodać cudzysłów.
Przykład: “[email protected]” ;)
Nie wiem czy działa, ale warto sprawdzić ;)
Timo | 2018-01-23 19:17:49 UTC | #11
:scream: :joy: :heart:
Jebanany | 2018-01-23 19:22:06 UTC | #12
[quote=”Timo, post:6, topic:5106”]
530 Login authentication failed
[/quote]
FTP nie oszukuje, coś zostało błędnie podane.
Timo | 2018-01-23 19:24:00 UTC | #13
Błąd rozwiązaliśmy:
[quote=”DBanaszewski, post:10, topic:5106”]
Spróbuj dodać cudzysłów.
Przykład: “[email protected]” :wink:
[/quote]
Pewnie coś błędnie czytało.
Użyłem cudzysłowie i działa :D
Toranktto | 2018-01-23 19:47:14 UTC | #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’).
MTGmati | 2018-01-23 22:52:54 UTC | #15
Przyda się. Czekam na opcje z SSH :wink:
DoreK | 2018-01-24 23:04:41 UTC | #16
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 | 2018-01-25 05:32:06 UTC | #17
Nie, nie działa :confused:
(Znaczy się działa, ale nie ma miejsca na tegp typu kopie)
helczyna | 2018-01-26 06:38:19 UTC | #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ć.
DBanaszewski | 2018-01-26 11:06:11 UTC | #19
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 | 2018-01-26 11:11:58 UTC | #20
To ja tylko podrzucę przykładową komendę na czyszczenie:
find SCIEŻKA -mtime +ILOŚĆ_DNI -exec rm {} \;
DBanaszewski | 2018-01-26 11:14:31 UTC | #21
Nie jest to komenda na czyszczenie poprzez protokół FTP ;)
Co do opcji z SSH to mi się akurat przyda ;)
Nieznajomy11 | 2018-01-26 11:27:43 UTC | #22
Ktoś używa jeszcze ftp?
DBanaszewski | 2018-01-26 11:28:39 UTC | #23
Ten skrypt ;)
DBanaszewski | 2018-01-26 13:10:30 UTC | #24
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 | 2018-01-26 14:36:48 UTC | #25
Jeśli masz serwer na backupy, to tańsze rozwiązania nie udostępniają protokołu SFTP.
anon10657637 | 2018-01-26 15:15:22 UTC | #26
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 | 2018-01-26 16:16:26 UTC | #27
Nie uważasz że używanie systemu kontroli wersji do jednoplikowego, prostego skryptu to jak wyskakiwanie z karabinem maszynowym do muchy? :P
anon10657637 | 2018-01-26 16:47:21 UTC | #28
Nie.
DBanaszewski | 2018-01-27 16:37:12 UTC | #29
Skrypt został przeniesiony na Github w celu zapewnienia 99.(9)% dostępności (zawsze może Github wywalić ) - https://goo.gl/QTTZVA.
Wersja wget:
wget https://goo.gl/QTTZVA -O backup.sh
helczyna | 2018-02-23 22:36:36 UTC | #30
Github ci wywalić…
happi | 2018-02-24 10:02:03 UTC | #31
https://gist.github.com/DBanaszewski/96066b6b869af6a9c4dec90c2cd3bbe3
DBanaszewski | 2018-02-24 10:10:27 UTC | #32
wget https://goo.gl/fgiPKN -O backup.sh
;)
Timo | 2018-02-24 12:37:11 UTC | #33
Zły adres twojej strony na samej górze pliku ;)
Timo | 2018-10-05 23:59:50 UTC | #34
Link nie działa :thinking:
Qmis | 2018-10-06 06:23:11 UTC | #35
https://gist.github.com/DBanaszewski/96066b6b869af6a9c4dec90c2cd3bbe3
@DBanaszewski co tu trzeba dokładnie podać partycja=”dokladnyadrespartycji (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 | 2018-10-06 06:35:50 UTC | #36
[quote=”Qmis, post:35, topic:5106”]
adres partycji tego serwera co będą robione kopie zapasowe czy adres partycji serwera do kopi
[/quote]
Tutaj musisz wpisać adres danej partycji, z której będą robione kopie zapasowe ;)
DBanaszewski | 2018-10-06 08:27:56 UTC | #37
Poradnik został zaktualizowany, kod został przeniesiony do mojego repozytorium (link).
DBanaszewski | 2019-01-08 19:57:48 UTC | #38
Nastąpiły pewne zmiany, kod wylądował w repozytorium, wszystko jest ok, dalej działa :stuckouttongue:
nitromaxpl | 2019-01-08 20:13:24 UTC | #39
Tego wlanie szukalem :)
Glupikocz | 2019-05-21 13:51:28 UTC | #40
(wpis wycofany przez autora, zostanie automatycznie usunięty za 24 godziny, chyba że zostanie oflagowany)
Glupikocz | 2019-05-24 21:07:29 UTC | #41
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 | 2019-11-02 15:18:38 UTC | #42
czy backup moze byc na jednym serwerze vps?
JanekJaran | 2019-11-02 15:57:43 UTC | #43
Chcesz robić lokalne kopie zapasowe? To traci sens. Kopie powinny być zdywersyfikowane, najlepiej w różnych hostingach i centrach danych.
Dudix | 2019-11-02 22:26:33 UTC | #44
chce robic backup serwera minecraft nie calego vps :)
DBanaszewski | 2019-11-03 09:24:35 UTC | #45
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 | 2019-12-19 05:09:28 UTC | #46
Da się użyć niestandardowego portu FTP?
psycho | 2019-12-19 17:08:32 UTC | #47
Prawdopodobnie wystarczy lekko przerobić skrypt, aby łączył się do odpowiedniego portu.
Axerr | 2020-05-08 01:29:53 UTC | #50
Czy skrypt posiada opcję dodania klucza ssh przy logowaniu?
DBanaszewski | 2020-05-08 06:29:33 UTC | #51
Nie, nie ma, ale postaram się dodać taką funkcję wkrótce :slight_smile:
Dudix | 2020-11-22 18:43:54 UTC | #52
popraw linki
DBanaszewski | 2020-11-25 10:37:41 UTC | #53
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 | 2020-11-23 14:17:47 UTC | #54
[quote=”DBanaszewski, post:53, topic:5106, full:true”]
Skrypt już jest porzucony.
Może by i działał, ale na pewno przestał być przeze mnie wspierany :wink:
[/quote]