Portál AbcLinuxu, 13. května 2025 22:25
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 wget
y, 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.