Portál AbcLinuxu, 11. listopadu 2025 17:10
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
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í.
#!/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
#!/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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.