Nowe posty

xx FirebirdSQL server w xinetd (1)
Wczoraj o 08:31:48
xx [SOLVED] Poczta Linux.pl (9)
2022-08-09, 15:09:29
xx Dostęp z komputerów z windowsem do plików udostępnionych na serwerze linux (samb (0)
2022-08-08, 20:27:55
xx brak uprawnienia do zamontowanej partycji ntfs - elementaryOS 6,1 (5)
2022-08-08, 06:36:07
xx Jak zainstalować sterowniki do karty sieciowej TP LINK WN350GD (1)
2022-08-04, 05:55:46
xx Ubuntu vs Fedora (1)
2022-07-26, 03:40:58
xx virtualization technology (1)
2022-07-25, 21:27:10
xx Migracja z centos 6 na centos 7 (3)
2022-07-25, 07:31:19
xx akonadi w KDE5 (10)
2022-07-22, 23:34:05
xx Alternatywa dla Delphi (7)
2022-07-22, 15:27:42

Autor Wątek: kopiowanie danych rsync - problem z warunkami  (Przeczytany 3941 razy)

Doom

  • Gość
kopiowanie danych rsync - problem z warunkami
« dnia: 2013-06-15, 20:17:49 »
Witam.

Mam taki mały skrypt który kopiuje dane z jednej lokalizacji do drugiej, problem w tym że jak druga lokalizacja jest niedostępna - co czasami się zdarza, system się wiesza... Chciałbym tego uniknąć i dać jakiś warunek wykonania skryptu. Na przykład ping drugiej lokalizacji. I w momencie kiedy ping nie przechodzi następuje przerwanie skryptu. Skrypt na chwilę obecną wygląda tak:

#!/bin/sh

# dane, które chcemy backupować
DATA=/mnt/sda1/Profiles/

mount.cifs //10.2.0.252/backup /backup -o username=Administrator,password=****

# katalog, w którym będą przechowywane kopie zapasowe
BACKUP_DIR=/backup

# odszukanie katalogu z ostatnim backupem:
LAST_BACKUP=$(find $BACKUP_DIR -name '????-??-??' |sort -g |tail -n 1)

# dzisiejsza data (do utworzenia katalogu)
TODAY=$(date +%F)

# katalog z dzisiejszym backupem
NEW_BACKUP=$BACKUP_DIR/$TODAY

# utworzenie katalogu pod nowy backup
mkdir $NEW_BACKUP

# synchronizowanie nowych plikow z jednoczesnym tworzeniem hardlinkow do
# niezmienionych plikow w katalogu $LAST_BACKUP
rsync -avHz --numeric-ids  --timeout=360 --link-dest=$LAST_BACKUP --progress $DATA/ $NEW_BACKUP/

umount /backup
Co powinienem dodać aby skrypt w momencie braku połączenia się nie wykonał ?

alvaro

  • Gość
kopiowanie danych rsync - problem z warunkami
« Odpowiedź #1 dnia: 2013-06-16, 00:04:09 »
Możesz po prostu przerwać po nieudanej komendzie, sprawdzając jej status ($?).
Jeśli jest równy zero to kontynuuj a w przeciwnym wypadku wyjdź.
status=$?
[[ "$status" -eq 0 ]] || exit 1
Jeśli nie chcesz, żeby komenda której wykonanie może się nie powieść wypisywała błędy i ostrzeżenia na ekranie możesz przekierować standardowy kanał błędu stderr na /dev/null:
komenda 2> /dev/null
czy stdout i stderr:
komenda > /dev/null 2>&1
Oczywiście zawsze wcześniej możesz dokonać jakiegoś sprawdzenia.
cmd=$(komenda_sprawdzajaca > /dev/null 2>&1)
status=$?
[[ "$status" -eq 0 ]] || exit 1

Doom

  • Gość
kopiowanie danych rsync - problem z warunkami
« Odpowiedź #2 dnia: 2013-06-16, 11:48:32 »
Dzięki za odpowiedź. Tak się zastanawiam, do sprawdzenia nie mogę chyba użyć polecenia ping - robi się bez końca... Może łatwiej będzie sprawdzić czy katalog się podmontował ?

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
kopiowanie danych rsync - problem z warunkami
« Odpowiedź #3 dnia: 2013-06-16, 15:45:02 »
Jeżeli masz taką możliwość, to lepiej jest użyć rsynca po SSH, a nie z podmontowanym katalogiem sieciowym, będziesz mieć z tym mniej problemów, z tym, że musisz mieć uruchomiony serwer ssh po drugiej stronie.

Pinga możesz użyć z parametrami -W (timeout w sekundach) oraz -c (liczba prób), np.:
ping -q -W1 -c 3 192.168.0.199 >/dev/null; 
if [ $? -eq 0 ]; then
  echo "Serwer dostepny";
else
  echo "Serwer niedostepny";
fi
Parametry W i c musisz dobrać w zależności od połączenia, najlepiej doświadczalnie.