Portál AbcLinuxu, 13. května 2025 22:25

Dotaz: Přerušované stahování přes wget

11.6.2006 21:45 mrw
Přerušované stahování přes wget
Přečteno: 313×
Odpovědět | Admin
Zdravím

Dávám dohromady můj třetí skript v životě. Potřebuju aby wget x minut stahoval a y minut odpočíval a pak zase pokračoval x minut ve stahování až do stažení souboru.

Částečně jsem se inspiroval v této diskuzi a sepsal následující skript. Pokusně tam mám krátkých 10s.

#!/bin/bash

while true

do

wget -c ftp://adresa.cz/nejakysoubor.pripona & sleep 10s

killall -INT wget

echo Preruseni

sleep 5s

done

Smyslem je, aby se společně se stahováním spustilo odpočítávání času a to zabilo wget, pak se počkalo 5s a začal další cyklus.

Přesto mně tento skript dělá psí kusy. Kdyby někdo věděl, jak na to, budu vděčný za radu. Děkuju. mrw
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.6.2006 21:57 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Odpovědět | | Sbalit | Link | Blokovat | Admin
No minimálně bych nepoužíval killall wget, protože si tak odstřelíš všechny wgety, ale po wget -c & si uložil hodnotu proměnné $! a zabíjel konkrétní proces. Dále se obecně nemůžeš spolehnout na to, že se ti proces po SIGINT ukončí, takže musíš testovat jeho existenci (potencionální race condition).

No a také postrádám podmínku pro ukončení cyklu, po dotažení souboru.

BTW: nebylo by lepší použít --limit-rate? Imho se snažíš obejít nějaký omezovač připojení.
When your hammer is C++, everything begins to look like a thumb.
11.6.2006 21:58 Marek Pasovsky | skóre: 32
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Odpovědět | | Sbalit | Link | Blokovat | Admin
co to znamena 'psi kusy'?

wget sype svuj vystup na obrazovku? to se da 'lecit' treba parametrem '-o'

Marek
If you don't understand or are scared by any of the above ask your parents or an adult to help you.
11.6.2006 22:07 mrw
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
První cyklus stahování proběhne v pořádku a pak přestane čekání fungovat, v cyklu se vždy spustí wget a pak jej to okamžitě zabije a tak furt dokola... slouží znak & k současnému spuštění dvou příkazů? nejspíš ano, ale nefunguje to podle mých představ.

To že wget něco vypisuje na obrazovku mně zdaleka nevadí...spíš naopak

Děkuju všem za odpovědi...
12.6.2006 08:15 petr
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co takhle SIGSTOP a SIGCONT ?
12.6.2006 11:34 honzaB | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevím teda přesně k čemu to bude, ale tohle by mělo fungovat:
#!/bin/bash

if [[ -z $1 ]]; then
        echo "Parametr by mel byt adresa ke stazeni."
        exit 1
fi

function exitX {
        kill -9 $PID
        exit 1
}

trap exitX SIGINT

while true; do
        wget -c "$1" &
        PID=$!
        # 5 vterin stahuje
        echo "Downloading... ($PID)" 
        sleep 5
        # posle SIGSTOP
        kill -19 $PID
        if [ $? -ne 0 ]; then
                kill -9 $PID
        fi
        # 5 vterin ceka
        echo "Waiting..."
        sleep 5
done
12.6.2006 11:49 mrw
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Teda, tak podrobnou odpoveď jsem nečekal. Moc a moc děkuju, hned jak přijdu z práce domů, tak to vyzkouším.

Na oplátku se pochopitelně budu dál snažit přispívat do diskuze tím, co už umím a co jsem se stačil naučit. Mám obzvlášť pochopení pro začátečníky, protože když jsem před 4 lety nainstaloval RedHat 6.5 a neměl jsem žádnou příručku ani solidní přístup na internet, tak jsem se cítil často....no....beznadějně ztracený.

mrw
12.6.2006 15:51 honzaB | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Příště napiš do otázky taky k čemu to potřebuješ. Ještě hodněkrát se budeš divit, že existuje spousta jiných způsobů jak problémy řešit, než ten konkrétní, na který se zrovna ptáš..

To jenom protože mě opravdu nenapadá použití pro tenhle skriptík :-)
Jiří Němec avatar 12.6.2006 18:07 Jiří Němec | skóre: 22 | blog: BluPix | Horní Smrčné
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ten program z té původní diskuze jsem použil jen asi dvakrát. Po tom, co mi ten program stáhl špatně 600 MB soubor, jsem to zavrhnul. Wget je sice dobrý program, ale není dokonalý, taky občas něco naváže špatně. Možná dnes bych to kontroloval torrentem. Ten program mám vystavený na koleji: bluget.c bude to tam možná jen do konce týdne. Je to experimenální kód, tak od toho moc nečekejte. Je to jeden z mých prvních prográmků, tak se nedivte že jsem tenkrát nevěděl jak se v C zpracovávají řetězce a parametry.
Spock: "Logic, logic, logic. Logic is the beginning of wisdom, not the end.
12.6.2006 20:37 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslím, že všechna řešení založená na tom, že se pustí wget a pak se tomu chudákovi posílají různé stopovací či zabíjecí signály jsou tak trochu podivné. Dá se to napsat i bez pouštění externího programu:
#!/usr/bin/env python
import urllib2, time, sys, os
delay = 2
burst_time = 12
url = sys.argv[1]
filename = os.path.basename(url)
response = urllib2.urlopen(url)
fw = open(filename, 'w')
stamp = time.time()
downloaded = 0
while True:
    data = response.read(65536)
    if not data: break
    fw.write(data)
    downloaded += len(data)
    print '%d bytes downloaded' %downloaded
    if time.time() - stamp > burst_time:
        print 'Waiting ...'
        time.sleep(delay)
        stamp = time.time()
print 'Done.'
Skriptík zvládá ftp i http a stahuje po 64kb blocích (velikost lze upravit). Občas, asi tak po dvanácti sekundách, se mezi jednotlivými bloky na dvě sekundy trochu prospí. Ten poměr jsem převzal od toho člověka v minulé diskusi, co 30 minut stahoval a 5 minut čekal. V tom programu sice nemám časování naprosto přesné, ale je to schválně - přece nebudu čekat, když mi zrovna teče paket, když zapisuju do souboru nebo tak něco.

Stejně mi ale přijde, že wget --limit-rate dělá úplně to stejné, jak už tu někdo psal.
Jiří Němec avatar 12.6.2006 21:04 Jiří Němec | skóre: 22 | blog: BluPix | Horní Smrčné
Rozbalit Rozbalit vše Re: Přerušované stahování přes wget
Konečně správný způsob. Další systémový způsob by možná byl nějaký shaper. Otázka k čemu to má sloužit. Já jsem prostě začal tahat jistou nižší rychostí a tak jsem byl schopný přenést i více jak 6GB měsíčně na pomalém GPRS a nestabilním telefonu. Ten můj program z předchozí diskuze jsem zavrhnul.

Když vidím váš kód, musím uznat, že python je opravdu krásný a mocný jazyk.
Spock: "Logic, logic, logic. Logic is the beginning of wisdom, not the end.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.