Jak utworzyć zdalny skrypt kopii zapasowej za pomocą Rsync?

Procédure

Do czego służy Rsync?

Rsync umożliwia synchronizację plików za pomocą wiersza poleceń, dzięki czemu można tworzyć kopie zapasowe plików z jednego miejsca do drugiego, synchronizując je według źródła.

Poniższy skrypt umożliwia wykonywanie pełnej kopii zapasowej raz w miesiącu i częściowej kopii zapasowej raz w tygodniu.

Jak utworzyć zdalny skrypt kopii zapasowej za pomocą Rsync?

Poniższy skrypt umożliwia utworzenie zdalnego skryptu kopii zapasowej za pomocą Rsync. Skrypt sprawdzi obecność folderu źródłowego, przetestuje dostępność serwera i co miesiąc utworzy nowy folder, do którego wstawi pełną kopię zapasową.

#!/bin/sh month=`date +%B` day=`date +%d-%m-%Y` hour=`date +%T` log="/home/user/logs_backups" local="/user/folder" remote="/files/backups_$month/" hostssh="ip_server" userssh="login" counter=5 retention=`date +%B --date='1 month ago'` name() { echo "-------------------------------------------------------------" > $log/$day_backup.log echo -e "$local backup of $(date +%d-%B-%Y)" >> $log/$day_backup.log echo "-------------------------------------------------------------" >> $log/$day_backup.log }# Jeśli katalog zawierający logi nie istnieje, zostanie utworzony.if [ ! -d $log ];then mkdir $log fi# Testujemy obecność folderu źródłowego ORAZ czy serwer odpowiada na pingrecus=$(ping -c $counter $hostssh | grep 'received' | awk -F',' '{ print $2 }' | awk '{print $1 }') > /dev/null 2>&1 if [[ ! -d $local ]] && [[ $recus -eq 0 ]];then name echo -e "$day-$hour :\n" >> $log/backup_$day.log echo -e "$local no longer exists or is inaccessible.\nServer inaccessible ($hostssh : $counter packets transmitted, $recus packets received).\nNo backup performed." >> $log/sauvegarde_$jour.log exit# Testujemy tylko obecność folderu źródłowegoelif [ ! -d $local ];then name echo -e "$jour-$heure : $local n'existe plus ou est inaccessible.\nNo backup performed." >> $log/sauvegarde_$jour.log exit# Testujemy tylko ping serweraelif [ $recus -eq 0 ];then name echo -e "$jour-$heure : Serveur inaccessible ($hostssh : $compteur paquets transmises, $recus paquets reçus).\nNo backup made." >> $log/sauvegarde_$jour.log exit fi echo "-------------------------------------------------------------" > $log/backup_day.log echo "Backup of $local from $(date +%d-%B-%Y)" >> $log/backup_day.log echo "-------------------------------------------------------------" >> $log/backup_$day.log # Transfer start time in log echo "Backup start time: $(date +%T)" >> $log/backup_$day.log echo "-------------------------------------------------------------"# transfer plikówrsync -avz --stats --protect-args --delete-after -e ssh $local $userssh@$hostssh:$distant >> $log/backup_$day.log # -a : tryb archiwizacji ( odpowiednik -rlptgoD ). # -z : kompresja danych podczas transferu.
-e : aby określić użycie ssh # -- stats : podaje informacje o transferze (liczba plików...). # --protect -args : Jeśli chcesz przesłać nazwę pliku zawierającą spacje, możesz ją określić za pomocą tej opcji. # --delete-after : usuwa pliki, które nie istnieją już w źródle po przesłaniu do folderu docelowego.
status=$? echo "" >> $log/day_backup.log# rsync return codescase $status in 0) echo Success >> $log/day_backup.log; 1) echo Syntax or usage error >> $log/day_backup.log; 2) echo Protocol incompatibility >> $log/day_backup.log;; 3) echo Błędy podczas wybierania plików i katalogów wejściowych/wyjściowych >> $log/sauvegarde_$jour.log;; 4) echo Akcja nieobsługiwana: próba manipulowania 64-bitowymi plikami na platformie, która ich nie obsługuje; lub opcja obsługiwana przez klienta, ale nie przez serwer. >> 5) echo Error starting client-server protocol >> $log/sauvegarde_$jour.log;; 6) echo daemon unable to write to log file >> $log/sauvegarde_$jour.log;; 10) echo I/O socket error >> $log/sauvegarde_$jour.log; 11) echo I/O file error >> $log/sauvegarde_$jour.log;; 12) echo Błąd w strumieniu danych protokołu rsync >> $log/save_$day.log;; 13) echo Błąd diagnostyki programu >> $log/save_$day.log;; 14) echo Error in IPC code >> $log/save_$day.log;; 20) echo SIGUSR1 or SIGINT received >> $log/save_$day.log;; 21) echo "An error returned by waitpid()" >> $log/save_$day.log;; 22) echo Error allocating main memory buffers >> $log/sauvegarde_$jour.log;; 23) echo Partial transfer due to an error >> $log/sauvegarde_$jour.log;; 24) echo Partial transfer due to disappearance of a source file >> $log/sauvegarde_$jour.log;; 25) echo The --max-delete limit has been reached >> $log/sauvegarde_$jour.log;; 30) echo Przekroczono maksymalny czas oczekiwania podczas wysyłania/odbierania danych >> $log/sauvegarde_$jour.log;; 35) echo Przekroczono czas oczekiwania podczas oczekiwania na połączenie >> $log/sauvegarde_$jour.log;; 255) echo Niewyjaśniony błąd >> $log/sauvegarde_$jour.log;; esac echo "-------------------------------------------------------------" >> Czas zakończenia w dziennikuecho "Czas zakończenia kopii zapasowej: $(data +%T)" >> $log/backup_$day.log echo "-------------------------------------------------------------"# Kopie zapasowe są usuwane zgodnie z retencją.ssh $userssh@$hostssh rm -rf "backups_$retention" exit

źródło: GitHub tuxmika

Wnioski

Możesz teraz utworzyć zdalny skrypt kopii zapasowej za pomocą Rsync, aby przesyłać pliki i foldery do przestrzeni kopii zapasowych online za pomocą LWS. Skrypt można uruchomić za pomocą zadania cron, aby uruchamiał się raz w tygodniu.

Nie wahaj się podzielić swoimi pytaniami i komentarzami!

help.lws.net/a/1229
Czy ten artykuł był pomocny?

Tak

Nie

Przeczytano 23 021 razy

Dziękujemy! Zadawaj pytania dotyczące naszej dokumentacji, jeśli potrzebujesz więcej informacji, i pomóż nam ją ulepszyć.

Podobne artykuły

Masz pytanie dotyczące tego artykułu?

Zadaj je zespołowi LWS i społeczności. Odpowiedź zostanie opublikowana po moderacji.

Zadaj pytanie zespołowi LWS i jego społeczności

RODO: Administrator: LWS-Ligne Web Services. Cel: moderacja i publiczna publikacja pytania, ewentualne powiadomienie o odpowiedzi. Podstawa prawna: zgoda (art. 6 ust. 1 lit. a RODO). Przechowywanie adresów e-mail: 90 dni po powiadomieniu, maksymalnie 12 miesięcy bez odpowiedzi. Aby skorzystać ze swoich praw, zobacz sekcję RODO naszego regulaminu.