Strona 1 z 1

Skrypt bash i rsync - sypie błędami

: 07 grudnia 2008, 09:20
autor: BlueMan

Kod: Zaznacz cały

#!/bin/bash

OPTIONS="-avz --rsh='ssh -p 666'"
SERVER="user@user.tv"
DEST="public_html/users/blueman/heros_backup"

echo "Bazy danych (source):"
rsync $OPTIONS /var/lib/mysql/ $SERVER:$DEST/mysql_source/
Ale przy wywołaniu niestety mam błąd:

Kod: Zaznacz cały

root@matrix:~# ./rsync_code
Bazy danych (source):
Missing trailing-' in remote-shell command.
rsync error: syntax or usage error (code 1) at main.c(362) [sender=3.0.3]
Co jest nie tak?

Jak dałem:

Kod: Zaznacz cały

echo "rsync $OPTIONS /var/lib/mysql/ $SERVER:$DEST/mysql_source/"
I ręcznie skopiowałem to działa bez żadnych problemów.

: 07 grudnia 2008, 10:12
autor: snah
Spróbuj

Kod: Zaznacz cały

rsync $'OPTIONS' /var/lib/mysql/ $SERVER:$DEST/mysql_source/

: 07 grudnia 2008, 10:18
autor: BlueMan
Nie działa

Kod: Zaznacz cały

Bazy danych (source):
ssh: connect to host user.tv port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(635) [sender=3.0.3]


[ Dodano: 2008-12-07, 14:24 ]
Rozwiązaniem mojego problemu jest:

Kod: Zaznacz cały

OPTIONSE="-e ssh -p 666"
OPTIONS="-avz"

rsync "$OPTIONSE" $OPTIONS ...

: 08 grudnia 2008, 08:14
autor: snah
Mnie problem zaintrygował na tyle, że wymyśliłem inne rozwiązanie:

Kod: Zaznacz cały

bash -c "rsync $OPTIONS /var/lib/mysql/ $SERVER:$DEST/mysql_source/"
Jako, że nie używam rsync, to testowałem na programie cut:

Kod: Zaznacz cały

#!/bin/bash 

OPTIONS="-d' ' -f2"
bash -c "cat $1 | cut $OPTIONS"
Ciekawy jestem, czy w Twoim przypadku też zadziała?

Odnośnie mojej pierwszej propozycji, to była bardzo głupia - zauważyłem tylko, że nie wyrzuca tego samego błędu, nie zdając sobie sprawy, że $'OPTIONS' oznacza string 'OPTIONS', a nie ma nic wspólnego ze zmienną...

EDIT: Być może trzeba będzie zmienić jeszcze jedną linię:

Kod: Zaznacz cały

OPTIONS="-avz --rsh=$'ssh -p 666'"

: 08 grudnia 2008, 12:07
autor: BlueMan
Tak - Twój sposób tak pośrednio działa.
rsync łączy się z serwerem, ale właściwie nic nie robi. Proces się "zawiesza"

I tej jednej linijki nie trzeba było zmieniać :D