Witaj na Forum Linuxiarzy
Zanim zalogujesz się, by pisać na naszym forum, zapoznaj się z kilkoma zasadami savoir-vivre'u w dziale Administracja.
Wiadomości z problemami zamieszczone w wątku "Przywitaj się" oraz wszelkie reklamy na naszym forum będą usuwane.

Dowiązanie symboliczne do najnowszego katalogu

Zaczęty przez gorus1, Marzec 01, 2019, 10:59:45 AM

Poprzedni wątek - Następny wątek

gorus1

Witam,
Do katalogu domowym jednego z użytkowników istnieje katalog o nazwie "kopie".
Tworzą się tam katalogi z kopiami z każdego dnia na 7 dni wstecz. Te 7 dostępnych katalogów jest nazwane datami także nazwa każdego z nich wygląda tak "DD-MM-RRRR"
Chciałbym utworzyć takie dowiązanie symboliczne, aby zawsze kierowało ono do najnowszego katalogu.
Czy da się coś takiego zrobić w debian 8?

gosc

Skoro jakiś program tworzy kopię, to można mu też dodać do listy zadań odświeżanie linku.
Czemu musi to być link symboliczny?
Prościej byłoby to załatwić aliasem.

TataPingu

Cytat: arecki w Marzec 01, 2019, 11:45:33 AM
Skoro jakiś program tworzy kopię, to można mu też dodać do listy zadań odświeżanie linku.

"Odświeżyć" to raczej się nie da, bo np:

/10.01.2019(katalog)---->/Ostatni_backup(softlink)

więc niemożliwe jest, by

/22.01.2019(katalog)---->/Ostatni_backup(softlink)

był prawidłowy, ale masz rację, dodanie do listy zadań prostego:

ln -s /22.01.2019 /Ostatni_backup

zautomatyzuje cały proces

gorus1

Program tworzący kopię znajduje się na innym serwerze (pobiera dane), jednak na tym serwerze też mógłbym dodać do listy zadań taką komendę...
Problem w tym, że codziennie będzie to inny katalog (inna data, a więc inna nazwa).
Potrzebuję to zrobić gdyż skrypt rsync na innym serwerze pobierający kopię nie wymagałby rekonfiguracji gdyż za pomocą jednego mechanizmu kopiowane byłoby to co chcę.

TataPingu

Cytat: gorus1 w Marzec 01, 2019, 12:36:24 PM
Problem w tym, że codziennie będzie to inny katalog (inna data, a więc inna nazwa)

To wszystko jest do zrobienia, tylko podajesz za mało danych.
Jedno, co mogę podpowiedzieć, to operacja, o której wspomniałem, powinna być przeprowadzona ze skryptu na serwerze z rsyncem...

gosc

A jakie zadanie wykonujesz na "tym serwerze", że potrzebujesz do tego linku symbolicznego?

gorus1

Chodzi o to, że skrypt rsync na serwerze źródłowym najpierw listuje katalogi poniższym kodem umieszczonym w plik ExcludeVPS.list (podpowiedzianym zresztą w innym temacie przez TataPingu)
#
#--napiane przez TataPingu z forum linuxiarze.pl
#
- **/@eaDir
- /lost+found
#--tutaj możesz wyłączyć  dowolną domenę
#- /domenadowyłączenia
#--tutaj możesz wyłączyć  dowolną domenę
+ **/
+ **/public_html/**
- *

a potem pobiera je w odpowiednie miejsce na serwer docelowy.
Jak wynika z powyższego kodu źródłowego, wyszukiwane (następnie pobierane) są katalogi o nazwie public_html jednak jest jeden katalog, który nazywa się inaczej i jest w innym miejscu, a chciałbym go także za pomocą jednego mechanizmu rsync móc pobierać.
Wymyśliłem więc, że utworzę dowiązanie symboliczne o nazwie "public_html", a odpowiedni parametr rsync skopiuje także i tą zawartość.
Tyle, że problem jest taki, że codziennie interesujący mnie katalog nazywa się inaczej.
Jednak tak patrzę to czy TataPingu, który tu się wypowiada nie podpowiedziałby, jak do tego pliku ExcludeVPS.list dopisać po prostu kolejną ścieżkę do wylistowania :)

TataPingu

Cytat: gorus1 w Marzec 01, 2019, 02:58:45 PM
Jednak tak patrzę to czy TataPingu, który tu się wypowiada nie podpowiedziałby, jak do tego pliku ExcludeVPS.list dopisać po prostu kolejną ścieżkę do wylistowania :)

Aaaa, to o to chodzi...
- przypomnij mi linkiem o jaki temat chodziło, bo nie pamiętam, to spróbujemy coś zaradzić...


TataPingu

Na wstepie przepraszam, ze nie mam teraz polskich czcionek, pisze z takiego sprzetu, ze nie ma sensu tego korygowac.

Wez po prostu rozszerz nasz skrypt i stworz dodatkowy plik, np. ExcludeVPS1.list


#!/bin/bash
#
#--napiane przez TataPingu z forum linuxiarze.pl
#
#
# CONFIG
#
LOGFILE=/var/log/BackupVPS.log
#
ZRODLO=root@111.22.33.44:/home/
#
#----TUTAJ DODAJ-------
ZRODLO1=root@111.22.33.44:/home/INNA/SCIEZKA/DO/KOPIOWANIA
#----TUTAJ DODAJ-------
#
KLUCZ="ssh -p 1111 -i /sciezka/do/kluczaSSH"
CEL=/katalog/z/backupem
EXCLUDEFILE=/opt/BackupVPS/ExcludeVPS.list
#
#----TUTAJ DODAJ-------
EXCLUDEFILE1=/opt/BackupVPS/ExcludeVPS1.list
#----TUTAJ DODAJ-------
#
# END CONFIG

#---- ALGORYTM
#
echo "Dnia $(date) backup domen rozpoczęty" >> "${LOGFILE}"
sleep 1s
#
# i teraz możesz użyć mojego algorytmu (przetestowany lokalnie działa poprawnie
# jak będzie z "kluczem" tego nie wiem)
#
#### rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H --exclude-from="${EXCLUDEFILE}" "${KLUCZ}" "${ZRODLO}" "${CEL}"
#
#----TUTAJ DODAJ-------
#### rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H --exclude-from="${EXCLUDEFILE1}" "${KLUCZ}" "${ZRODLO1}" "${CEL}"
#----TUTAJ DODAJ-------
#
# albo Twojego (odpowiednio dopasowałem)
#
rsync -chavzP --stats -e "ssh -p 1111 -i /sciezka/do/kluczaSSH" --exclude-from="${EXCLUDEFILE}" "${ZRODLO}" "${CEL}"
#
#----TUTAJ DODAJ-------
rsync -chavzP --stats -e "ssh -p 1111 -i /sciezka/do/kluczaSSH" --exclude-from="${EXCLUDEFILE1}" "${ZRODLO1}" "${CEL}"
#----TUTAJ DODAJ-------
#
#---- ALGORYTM
#
echo "Dnia $(date) backup domen zakończony pomyślnie" >> "${LOGFILE}"
sleep 1s
#
exit 0


Oczywiscie, wszystko dopasuj do struktury, ktora wczesniej zrobiles...
- ale mysle, ze nie powinienes miec zadnych problemow,,,

gorus1

Ok, dzięki, rozumiem wszystko z tym ExcludeVPS1.list natomiast zauważ, że mi chodzi aby ten plik powodował pobranie tylko jednego katalogu ze źródła.
W źródle znajduje się zawsze 7 katalogów, a ich nazwami jest data. Codziennie dochodzi jeden katalog z najnowszą datą i usuwany jest jeden katalog z najstarszą datą.
Ze względu na ograniczone miejsc zależy mi na pobraniu wyłącznie najnowszego katalogu (najnowsza data) więc ExcludeVPS1.list powinien wyglądać chyba inaczej.

gorus1

Czy da się coś w tym kierunku zrobić, aby wylistować jeden najnowszy katalog?

TataPingu

Cytat: gorus1 w Marzec 07, 2019, 12:28:16 PM
Czy da się coś w tym kierunku zrobić, aby wylistować jeden najnowszy katalog?

Nie odpowiadałem długo, bo zarazki jakiegoś świństwa wymusiły na mnie zrobienie "przymusowej" przerwy i kilkudniowej kuracji ;)

Chmmm, z tym "pobraniem tylko jednego katalogu" o dowolnej i przypadkowej nazwie (ok, nazwa to data) może być trochę problematyczne. Rsync na pewno nie przewiduje takiej opcji....
Tu musiałbyś dobudować dodatkowy skrypt, albo ew. odpowiednio spreparować zmienną "ZRODLO1=" w połączeniu z  $(date).
Czy to drugie w ogóle jest możliwe, tego nie wiem, tak tylko nasunęło mi się w pierwszym momencie, a nawet, gdyby było możliwe, to za dużo mamy tutaj czynników, które mogłyby zakłócić działający algorytm.
Jedynie dodatkowy skrypt, ale w takim przypadku zadanie staje się coraz bardziej skomplikowane...
- gdyby to jeszcze był jakiś serwer z "prawdziwego zdarzenia", to można by się pokusić stworzyć coś działającego, ale przy tym NASie (jeśli dobrze pamiętam) to raczej nie ma wielkiego pola do popisu.

Najprostszym rozwiązaniem będzie powiększenie, czy dołożenie HDD w NASie. Prawdopodobnie masz tam interfejs USB, więc wystarczy przekierowanie strumienia rcync na USB-HDD i masz problem rozwiązany

gorus1

Dziękuję TataPingu za zaangażowanie.
Jednak po głębszym zastanowieniu tej komendy
rsync -avHzL --stats -e "${KLUCZ}" --exclude-from="${EXCLUDEFILE}" --numeric-ids --link-dest=$LAST_BACKUP $ZRODLO/ $NEW_BACKUP/
doczytałem, że opcja "--link-dest wyszuka i porówna w katalogu docelowym pliki, które mają być backupowane i jeśli nie będzie zmian to utworzy hardlinka, a że są tam w dużej mierze powtarzające się kopie więc nie ma aż tak dużego przyrostu danych więc "nie warta skórka za wyprawkę"
... ale i tak dzięki.

Zobacz najnowsze wiadomości na forum