Pomoc Cron uruchamia tylko część skryptu. Gdzie tkwi błąd?

D

Deleted member 15017

Guest
Witam wszystkich Forumowiczów.

Od dłuższego czasu walczę ze skryptem tworzącym kopie zapasowe. Skrypt w pierwszym kroku ciągnie dane ze zdalnej lokalizacji za pomocą rsync przez ssh i tworzy kopię lustrzaną na NAS a potem kopię przyrostową za pomocą rdiff-backup tego co zostało zrsyncowane. Zdalny host to win xp na którym działa serwer ssh na który loguje się kluczem. Wszystko działa tak jak zaplanowałem (poza detekcją zdalnego hosta dlatego jest odkomentowane ale z tego mogę zrezygnować) ale tylko przy wywołaniu skryptu ręcznie czy to przez użytkownika yy czy admina - nie ma problemu z ssh. Zależy mi na uruchamianiu skryptu cronem a tu występuje problem. Sam skrypt jest uruchamiany ale wykonuje się tylko rsync. Polecenie rdiff-backup nie jest wykonywane. Skrypt wykonywany ręcznie czy przez admina czy usera działa. Z crona nie chce. Zauważyłem, że cron nie chciał uruchomić skryptu jeśli wskazałem użytkownika yy który jako jedyny może się połączyć przez ssh ze zdalnym hostem, dlatego wpis w cron nie ma zdefiniowanego użytkownika, a admin korzysta z klucza użytkownika yy.

Model TS-212p, Firmwere 4.3.3.0238, Optware 0.99.163

A to sam skrypt:

Kod:
#!/bin/bash -xv
RHOST="xx.xx.xx.xx"
OPTIONS="-azrv --verbose --stats --progress --exclude 'Pobrane' --delete"
CEL="/share/HDB_DATA/homes/yy/.archiwum"
DATE=`date +'%Y.%m.%d.%H:%M'`

#sprawdzanie dostępnosci RHOST
PING="/bin/ping"
#$PING -c 3 -t 300 $RHOST >/dev/null 2>&1
#R1=$1
#if [ $R1 -eq1 ];
#then
#echo "HOST nie jest dostepny przerywam wykonywanie kopi" > /$CEL/ERROR_$DATE.log
#exit 0
#else
#echo "OST jest dostepny robie kopie"
#fi
# prosty mechanizm lock'a by uniemożliwić wielokrotne uruchomienie
# skryptu, np. w sytuacji gdy nie zdąży wykonać się pełny backup
if [ -f "/share/HDB_DATA/homes/yy/server_sync" -o -f "/share/HDB_DATA/homes/yy/server_sync_block" ]; then
        echo "Another sync is still running!"
        exit 1
fi
touch /share/HDB_DATA/homes/yy/server_sync
#kopia lustrzna zasobow 
#SB4
rsync  $OPTIONS -e "ssh -p 1234 -l user -i /share/HDB_DATA/homes/admin/.ssh/id_rsa" $RHOST:/cygdrive/f/SB4 \
$CEL/current --log-file=/$CEL/1.log
#dane
rsync  $OPTIONS --exclude 'Pobrane' --exclude 'Pobieranie' -e "ssh -p 1234 -l user -i /share/HDB_DATA/homes/admin/.ssh/id_rsa" $RHOST:/cygdrive/f/dane \
$CEL/current --log-file=/$CEL/2.log

# sprawdzenie czy synchronizacja się udała
# jeśli się nie udała to możemy chcieć skasować niedokończony
# jeśli się nie udała to możemy chcieć skasować niedokończony
# backup by kolejny nie musiał być "prawie pełnym"
# plik /tmp/server_sync_block trzeba skasować ręcznie
if [ $? -ne 0 -a $? -ne 24 ]; then
        echo "Something was wrong becase rsync return $?"
            touch /share/HDB_DATA/homes/yy/server_sync_block
            exit 2
fi

#utworzenie kopii przyrostowej
rdiff-backup -v5  --preserve-numerical-ids --print-statistics /share/HDB_DATA/homes/yy/.archiwum/current /share/HDB_DATA/homes/yy/.archiwum/rdiff_backup


cat /$CEL/1.log  /$CEL/2.log /$CEL/rdiff_backup/rdiff-backup-data/backup.log > /$CEL/log.log

mv /$CEL/log.log  /$CEL/$DATE.log

rm  -f $CEL/?.log
rm /$CEL/rdiff_backup/rdiff-backup-data/backup.log

# zwalnianie lock'a
rm -f /share/HDB_DATA/homes/yy/server_sync

Najdziwniejsze jest to, że skrypt z palca działa, a z crona tylko w części polecenie rync działa, rdiff-backup nie, nie tworzy się kopia przyrostowa, nie pojawiają się żadne kopie przyrostowe po sprawdzeniu rdiff-backup -l. Będę wdzięczny za wszelkie sugestie. Co jest źle?
 
Aby zobaczyć tę odpowiedź, musisz się zalogować lub zarejestrować.
 

Załączniki

  • upload_2017-9-23_19-35-53.png
    upload_2017-9-23_19-35-53.png
    4,5 KB · Wyświetleń: 62
  • Love
Reakcje: Silas Mariusz