Temat: Skrypt bash - download plików w tle (wget) openwrt
Witam wszystkich
Spędziłem trochę godzin nad tematem ściągania plików programem wget w tle.
Napisałem skrypt i wszystko ładnie działa, dlatego chciałem się podzielić z innymi.
Jest przydatny zwłaszcza kiedy ściągamy coś z wolnych serwerów
(ściąganie trwa wiele godzin i np. zamiast zostawiać włączony komputer
chcemy uruchomić ściąganie na ruterze gdzie mamy wpięty pendrive lub dysk)
Całość składa się z pliku wget.txt (do którego dopisujemy linki) oraz
skryptu bash download.sh (zajmującego się automatycznym ściąganiem)
1.
Plik old_wget.txt tworzymy w folderze download (tym do którego zamierzamy ściągać)
Do pliku old_wget.txt linia pod linią zapisujemy linki do ściągnięcia (obsługiwane protokoły: https, http lub ftp)
Po zapisaniu wszystkich linków zmieniamy nazwę pliku old_wget.txt na wget.txt
(jest to informacja dla skryptu, że może rozpocząć ściąganie).
Skrypt po rozpoczęciu ściągania zmieni nam nazwę z wget.txt na old_wget.txt
Wszystkie pliki będą ściągane jednocześnie w tle.
2. Skrypt download.sh
Skrypt działa nieprzerwanie w tle i co 10 sekund sprawdza
czy nie zostały dodane nowe linki (czy istnieje plik wget.txt).
w zmiennej DIR='/tmp/usb_mount/dev_sda2/download'
zapisujemy folder do którego zamierzamy ściągać pliki
(u mnie to folder: /tmp/usb_mount/dev_sda2/download)
#!/bin/sh
# uwaga:
# ruchomic:
#
# dopisujemy do /etc/rc.local:
# /etc/download.sh 2>/dev/null &
URLFILE='wget.txt'
DIR='/tmp/usb_mount/dev_sda2/download'
#echo $URLFILE
#echo $DIR
while [ true ]
do
# sprawdzamy czy plik istnieje
if [ ! -e $DIR/$URLFILE ]
then
#echo "nie istnieje: $DIR/$URLFILE"
sleep 10
continue
fi
#zamieniamy znaki '\r' na spacje (BARDZO WAZNE)
URLTABLE=$(tr '\r' ' ' <$DIR/$URLFILE)
# odczytujemy linki jeden po drugim
for URL in $URLTABLE
do
wget -cq $URL -P $DIR &
done
# zmieniamy nazwe pliku na "old"
mv $DIR/$URLFILE $DIR/old_$URLFILE
done 3. Instalacja skryptu download.sh
Skrypt kopiujemy do /etc
Następnie w pliku /etc/rc.local dopisujemy linię: /etc/download.sh 2>/dev/null &
nasz /etc/rc.local powinien wyglądać tak:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
/etc/download.sh 2>/dev/null &
exit 04. restartujemy ruter i używamy