Pagina 1 di 1
rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 11:34
da joe
La mia connessione ad internet via cellulare a volte cade.
Così faccio girare dietro le quinte uno script che si occupa di riconnettermi ogni volta che trova la connessione down.
In questi giorni stavo scaricando parte del ramo 12.2 di slackware.
Così mi sono creato la mia lista di file da tirare giù da un mirror che offre connettivita via rsync (università dello stato dell'oregon) e ho lanciato rsync sperando in bene.
L'obiettivo è lasciar fare a rsync durante la notte.
Ma...
Ho notato che se la connessione cade e poi si riconnette grazie allo scriptino di riconnessione rsync che ovviamente s'era fermato, non prosegue più.
È normale questo comportamento?
Re: rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 12:01
da targzeta
Si è normale. Di allo scriptino di rilanciare anche rsync, lui si accorge di ciò che ha fatto e di quello che rimane da fare.
Spina
Re: rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 13:16
da joe
Ma rsync non "muore" da solo.
Quindi alla riconnessione dovrei prevedere uno script che killa e successivamente avvi rsync (con tutte le opzioni del caso....dico bene?
Ma non è strano questo "limite" di rsync?
Penso ad esempio a wget che prevede millemila opzioni per ritentare a contattare il server ecc ecc.
Siamo proprio sicuri che rsync non includa qualche opzione del per comprendere questa preziosa funzionalità?
Non è un problema scrivere un semplice scriptino che colmi questa "lacuna", ma chiedevo comunque perchè le funzionalità di rsync sono tante e nel man mi perdo, su google effettivamente non ho trovato nulla a riguardo di queso specifico aspetto di rsync.... La tua conferma quindi me l'haspettavo.
Per lo script...è un altro discorso va bè. Comunque il mio scriptino che tiene in piedi la connessione fà solo quello...
Penso sia meglio dividere i compiti ed eventualmente predisporre uno script da eseguire alla connessione quindi da infilare in /etc/ppp/ip-up.
Re: rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 13:31
da targzeta
Nel man trovo questo:
Codice: Seleziona tutto
--timeout=TIMEOUT
This option allows you to set a maximum I/O timeout in seconds. If no data is
transferred for the specified time then rsync will exit. The default is 0,
which means no timeout.
quindi potresti fare una cosa del tipo
o qualcosa del genere (lo sleep serve a dare il tempo allo script per riconnetterti, ma dovresti già essere riconnesso se il timeout è buono).
Spina
Re: rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 15:29
da joe
Scusa eh, ho capito la questione del timeout, l'avevo anche letta di sfuggita nel man, ma visto che stavo cercando una funzione builtin per farlo ritentare non m'ero soffermato su quell'opzione....sinceramente mi sfugie questo punto:
Cosa significa?
Intanto immagino che "rsync --timeout....ecc.ecc" sia il comando intero con cui richiamo rsync. E va bene...
Ma non riesco bene a capirlo messo così nel while con il ! davanti. Cioè vuol dire:
fintanto che il comando ... non da esito negativo, cioè non ritorna un valore diverso da zero...
Mi resta difficile capirlo, abbi pazienza....potresti chiarirmi le idee?
Re: rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 15:42
da targzeta
Nel man dice che con l'opzione --timeout esce con un valore diverso da 0 se avviene un 'timeout' della connessione. Quindi il comando dice:"finché rsync torna un valore diverso da 0, sleep 1".
In pratica lanci rsync, se rsync esce con 0 allora il while si ferma, se esce con un valore diverso da 0 (probabile timeout) si fa uno sleep e poi si rilancia rsync.
Lo sleep è una cosa come un altra da mettere nel corpo del while, potresti anche metterci: echo "timeout $(date)".
Spina
Re: rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 17:39
da joe
Mmm....
Dunque poniamo di avere lanciato rsync con quel comando. Se la connessione è down all'intante del lancio, ok, ritenta finchè la connessione non è up e non va più in timeout.
Ma se all'istante del lancio la connesione è up, rsync non va in timeout e lo script termina, o no?
E poi se la connessione dovesse cadere...rsync morirebbe, ma non vi è più lo script che ritenta o sbaglio?
Quindi mi ritroverei con rsync morto e lo script terminato...sbaglio?
Re: rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 20:03
da targzeta
joe ha scritto:Mmm....
Dunque poniamo di avere lanciato rsync con quel comando. Se la connessione è down all'intante del lancio, ok, ritenta finchè la connessione non è up e non va più in timeout.
Ma se all'istante del lancio la connesione è up, rsync non va in timeout e lo script termina, o no?
Termina quando esce rsync, ricorda che lo script esegue rsync.
joe ha scritto:E poi se la connessione dovesse cadere...rsync morirebbe, ma non vi è più lo script che ritenta o sbaglio?
se la connessione cade, allora dopo un pò scatta il timeout e rsync esce con un valore diverso da 0, quindi l'argomento del while risulta vero e lo script eseguel sleep e poi di nuovo rsync.
joe ha scritto:Quindi mi ritroverei con rsync morto e lo script terminato...sbaglio?
Penso che sbagli, ma puoi sempre testarlo. Io non l'ho provato ma puoi fare una prova tu, fallo eseguire e poi ferma la connessione, quindi rimettila up e vedi che succede

.
Spina
Re: rsync non presidiato su connessione instabile
Inviato: sab 11 apr 2009, 20:14
da targzeta
Ho fatto una prova, diciamo che se il tuo script che controlla la connessione è veloce, allora rsync riusa il vecchio socket e quindi ricomincia senza bisogno di rieseguirlo.
Invece se va in timeout, il codice che ti ho scritto funziona bene, rsync ritorna un valore diverso da 0 e il ciclo ricomincia.
Spina
Re: rsync non presidiato su connessione instabile
Inviato: dom 12 apr 2009, 15:28
da joe
spina ha scritto:joe ha scritto:
Ma se all'istante del lancio la connesione è up, rsync non va in timeout e lo script termina, o no?
Termina quando esce rsync, ricorda che lo script esegue rsync.
Vero, qui sta il mio errore...
Il resto del mio post è quindi totalemte insensato. Ora mi torna il tuo script e sinceramente non mi dispiace per niente nella sua semplicità.
Ho fatto una prova, diciamo che se il tuo script che controlla la connessione è veloce, allora rsync riusa il vecchio socket e quindi ricomincia senza bisogno di rieseguirlo.
Il mio script non è poi così veloce, o almeno non sempre, in pratica deve ristabilire la connessione bluetooth al cellulare e riconettere
Ma a questo punto, che rsync continui sullo stesso socket o vada in timeout poco cambia, l'importante è che poi riprenda la sincronizzazione. E mi pare proprioche da quanto dici funzioni bene.
Modificherò il mio script di sincronizzazione mettendo il rsync nel ciclo while...la prossima volta che mi servirà lo sfrutterò.
Grazie mille dell'aiuto, penso che questa discussione torni utile anche a molti non dotati di connessioni stabili e moderne.
Invece se va in timeout, il codice che ti ho scritto funziona bene, rsync ritorna un valore diverso da 0 e il ciclo ricomincia.