Newsgroup: it.comp.os.linux.software
Titolo: Impostare wget al meglio

Il titolo della discussione non è il massimo, visto che la
configurazione che sto cercando è quella ottimale per uno scopo ben
preciso e non in assoluto.
Il mio obiettivo è lasciare wget a scaricare durante la notte un dato
file. Se può servire dico anche che scaricherebbe da siti tipo
rapidshare, megaupload ecc, ma il discorso è più generale...
Il problema è che la mia connessione ogni tanto si blocca e utilizzo uno
script per eventualmente sbloccarla e riconnettermi. Purtroppo questa
operzione puù essere più o meno lunga e potrebbe metterci anche un'ora o
più (e in ogni caso non è detto che ci riesca).
Quindi, in pratica vorrei che wget restasse attivo anche nel tempo in
cui la connessione è down. Inoltre vorrei che i tentativi di resume
fossero abbastanza ravvicinati, in modo da non ddover aspettare un
quarto d'ora se la riconnessione avvenisse entro un minuto.
Con quali opzioni andrebbe lanciato wget?
Per chiarire, mettiamo di avere un file mezzo scaricato e di farne il
resume alle 11.00 di sera e poi abbandonare il pc nella speranza che al
mattino il file sia completo.
M'era venuto in mente anche di fare uno script che controllasse lo stato
della rete e quello di wget e nel caso la prima fosse su e il secondo
non fosse tra i processi, allora riavviare semplicemente wget con la
semplice opzione -c per riesumare il file.
Ho notato però che questo comporta un problemino con i siti dai quali
sto scaricando:
per esempio megaupload non mi ha fatto riesumare un file che avevo
iniziato ieri sera ed interrotto dopo 2 ore circa a causa dello stallo
della connessione. In pratica ho dato ctrl-c a wget, ripristinato la
connessione e quindi riavviato "wget -c URL". Purtroppo il link non
funzionava più e alla fine attraverso firefox ho capito che era scattata
la limitazione di megaupload...probabilmente avendo già scaricato un bel
po' di roba e AVENDO INTERROTTO il download, megaupload ha interpretato
che volessi scaricare un nuovo file, e pertanto che dovessi attendere
circa 4 ore o giu di lì.
Il mio ip è dinamico ad ogni riconnessione quindi non so come faccia
megaupload a bloccarmi...se avete idee...
Io ho pensato che fosse colpa del resume, del tipo: stai riprendeno un
download? allora vediamo quanto hai già scaricato...100 MB? troppo!
riprova tra 4 ore... 
Ma in tal modo non sarebbe possibile riprendere il download in nessun
caso, invece dopo le 4 ore il downlad è ripartito. Se non si basano sul
mio IP come fanno?
Ho provato anche ad usare proxy pubblici, ma senza risultati...
Ogni idea che vi viene è benaccetta  :-)
Grazie in anticipo e scusate la lunghezza, spero solodi aver spiegato
chiaramnte il problema.  ;-) 

 chiaramnte il problema.  ;-) 
Nessuna idea?
Se per colpa della mia scarsa chiarezza aveste difficoltà a capire cosa
sto chiedendo, non esitate a chiedere.

 Con quali opzioni andrebbe lanciato wget?
La man page di wget e' piutostto chiara.
Io userei le opzioni sequenti:
<quote>
-t number
--tries=number
Set number of retries to number. Specify 0 or inf for infinite
retrying. The default is to retry 20 times, with the exception of
fatal errors like ''connection refused'' or ''not found'' (404), which
are not retried.
-c
--continue
Continue getting a partially-downloaded file. This is useful when you
want to finish up a download started by a previous instance of Wget,
or by another program.
--waitretry=seconds
If you don't want Wget to wait between every retrieval, but only
between retries of failed downloads, you can use this option. Wget
will use linear backoff, waiting 1 second after the first failure on a
given file, then waiting 2 seconds after the second failure on that
file, up to the maximum number of seconds you specify. Therefore, a
value of 10 will actually make Wget wait up to (1 + 2 + ... + 10) = 55
seconds per file.
</quote>
E forse anche:
<quote>
--retry-connrefused
Consider ''connection refused'' a transient error and try again.
Normally Wget gives up on a URL when it is unable to connect to the
site because failure to connect is taken as a sign that the server is
not running at all and that retries would not help. This option is for
mirroring unreliable sites whose servers tend to disappear for short
periods of time.
</quote>
Saluti,
The Librarian

 --retry-connrefused
Penso che quest'ultima sia quella che mi mancava per mantenere wget
attivo anche a connessione down.
La prima setta il numero di tentativi in caso di errore penso e quindi
la setterei a 0, ovvero infiniti tentativi.
La seconda la utilizzavo già, ok.
La waitretry invece mi lascia qualche dubbio come hosottolineato sopra.
L'opzione "--wait" esprime il numero di secondi di attesa tra diversi
tentativi, mentre la "--waitretry" esprime il tempo di attesa tra i
tentativi che non vanno a buon fine, per gli altri tentativi non aspetta
niente...
Ma allora io mi chiedo che senso hanno più tentativi se tutto fila
liscio? è per questo che non afferro la differenza tra le due opzioni.
Poi c'è da dire cheil flag --waitretry imposta il tempo di attesa in
modo particolare:
per esempio se setto ad N quella opzione i tentativi saranno del tipo:
tentativo1---> fallisce
aspetto 1s
tentativo2---> fallisce
aspetto 2s
tqntativo3---> fallisce
aspetto 3s
.
.
tentativoN---> fallisce
aspetto Ns
tentativoN+x-> fallisce
aspetto Ns
Però nel man fà l'esempio con 10s e parla di 55s per file...ma in realta
non aspettera 55s tra un tentaivo e il successivo, qualora sia raggiunto
il massimo intervallo...o sbaglio?
Voi come la capite?
Spero possiate darmi un suggerimentoin più su questo punto.
Grazie in anticipo e arrisentirci

 il massimo intervallo...o sbaglio?
Con waitretry=x setti il massimo ritardo tra due tentativi di download
pari ad x. Lui provera' prima con 1 secondo, poi con 3, poi con 6, e
cosi' via, fino ad arrivare a x secondi. Dopodiche' il ritardo tra due
successivi tentativi di donwload sara' sempre pari ad x.
Saluti,
The Librarian

 successivi tentativi di donwload sara' sempre pari ad x.
Ok, come avevo inteso io, solo che la spiegazione nel man tirava in
ballo 55 secondi impostandolo a 10...era questo che non mi tornava...
Probabilmente intendeva che dopo 55 secondi l'intervallo d'attesa sarà
pari al massimoimpostato (quindi a dieci).

> --retry-connrefused
Allora sostanzialmente le opzioni da settare per ottenere la situazione
desiderata sarebbero:
wget -t 0 -c --waitretry=10 --retry-connrefused <URL>
Magari faccio un piccolo script per richiamare questo comando.
Che ne pensi/pensate di questi settaggi delle opzioni?
Vi sembra una scelta razionale o puň portare a qualche inconveniente?

 Vi sembra una scelta razionale o può portare a qualche inconveniente?
IMHO un waitretry di 10 secondi e' esagerato. Considera che potrebbe
anche accadere che sia il server, e non la tua linea, ad avere dei
problemi. In questo caso non mi pare carino provare a connettersi
cosi' insistentemente. Un waitretry di 5 minuti mi sembra piu'
ragionevole (se ti cade la linea una volta sola, alla peggio il
download finira' 5 minuti dopo).
Saluti,
The Librarian

 download finira' 5 minuti dopo).
Ok, facciamo allora 1 min, visto che la probabilità che il problema stia
nella mia connessione è decisamente maggiore. ;-)
Ti ringrazio per la disponibilità e la consueta precisione. :-p
Ci si legge  :-D