LINUX.ORG.RU

Помогите упростить/ускорить выполнение скрипта

 


0

2

Есть скрипт

Date_Time=`date +%Y-%m-%d` 
Save_Dir=/dir/${Date_Time}

cd $Save_Dir

wget -c  ftp://url_1.sql.gz --ftp-user=user1 --ftp-password='pass1'  -O ${Date_Time}-url_1.sql.gz
wget -c  ftp://url_2.sql.gz --ftp-user=user2 --ftp-password='pass2'  -O ${Date_Time}-url_2.sql.gz
wget -c  ftp://url_3.sql.gz --ftp-user=user3 --ftp-password='pass3'  -O ${Date_Time}-url_3.sql.gz
...
...
export LC_ALL=C; zcat ${Date_Time}-url_1.sql.gz|  grep "keyword1"   > $Save_Dir/keyword1.txt
export LC_ALL=C; zcat ${Date_Time}-url_2.sql.gz|  grep "keyword2"   > $Save_Dir/keyword2.txt   
export LC_ALL=C; zcat ${Date_Time}-url_3.sql.gz|  grep "keyword3"   > $Save_Dir/keyword3.txt   
... и еще таких же около 100 строк 
   
gzip *.txt
Можно как-то ускорить выполнение этого скрипта, чтоб процессы выполнялись не поочередно, а как-нибудь параллельно? Буду крайне признателен за помощь


export LC_ALL=C

Date_Time=`date +%Y-%m-%d` 
Save_Dir=/dir/${Date_Time}

cd $Save_Dir

wget -c  ftp://url_1.sql.gz --ftp-user=user1 --ftp-password='pass1'  -O - | zgrep "keyword1"  | gzip -c > $Save_Dir/keyword1.txt.gz &
wget -c  ftp://url_2.sql.gz --ftp-user=user2 --ftp-password='pass2'  -O - | zgrep "keyword2"  | gzip -c > $Save_Dir/keyword2.txt.gz &
... &
... &
... и еще таких же около 100 строк  &

wait
   
exit 0

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 2)

натупую - напихай амперсандов в конце строки

Avial ★★★★★
()

Узкие места - это интернет при загрузке и диск при поиске. Параллелизацией тут только замедлить можно.

Можно делать поиск на лету во время загрузки:

wget .... -O - | tee ${Date_Time}-url_3.sql.gz | zcat | grep keyword | gzip > keyword.txt.gz
legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от anonymous

лолочка увидела тут много математики и натужно начала хихикать
лолочке невдомёк, что wget это не про математику

zolden ★★★★★
()
Ответ на: комментарий от legolegs

Узкие места - это интернет при загрузке и диск при поиске. Параллелизацией тут только замедлить можно.

Ой, ну обычное же дело, когда с категоричностью утверждения можно облажаться с выводом. :) На ftp могут ограничить скорость скачивания конкретного файла как руками так и по причине нагрузки на сеть/диск_ftp_сервера. Если этот скрипт выполняется не однократно, то такие вещи можно выявить и сделать параллельно несколько загрузок, иногда хитро сгруппировав.

vodz ★★★★★
()

Как-то так.


SIM_PROCESSES=10

cat << EOF | xargs -n 1 -P $SIM_PROCESSES wget 
-c ftp://url_1.sql.gz --ftp-user=user1 --ftp-password='pass1'  -O ${Date_Time}-url_1.sql.gz
-c ftp://url_2.sql.gz --ftp-user=user2 --ftp-password='pass2'  -O ${Date_Time}-url_2.sql.gz
-c ftp://url_3.sql.gz --ftp-user=user3 --ftp-password='pass3'  -O ${Date_Time}-url_3.sql.gz
EOF
Yur4eg ★★
()
Ответ на: комментарий от anonymous

ты только начал писать варианты, а wget уже скачал файл.
ты почесал затылок, а wget уже скачал файл
ты закатил глаза, а wget не закатывал, вместо этого он скачал файл

zolden ★★★★★
()
Ответ на: комментарий от vodz

ftp могут ограничить скорость скачивания конкретного файла как руками

Могут, причём умелые админы шейпить могут и IP целиком. Но в 2017 смысла в этом мало.

так и по причине нагрузки на сеть/диск_ftp_сервера.

Если сервер 1, то сам понимаешь. А он, прозреваю, 1.

Хотя я соглашусь, иногда можно получить выигрыш. Тогда нужно сделать скрипт-воркер с 2 аргументами, файл строк «url keyword» и скормить parallel (или xargs, но это сложнее, он понятия «пара аргументов» не разумеет)

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Могут, причём умелые админы шейпить могут и IP целиком. Но в 2017 смысла в этом мало. Если сервер 1, то сам понимаешь. А он, прозреваю, 1.

Во-первых, могут шейпить каждую скачку (соединение), а не сам конкретный файл. В 21-ом веке такого кругом полно: все uploader-ы и прочие X-диски «бесплатные». Во-вторых, если файлы на разных дисках, то ускорение можно получить даже на одном сервере. А в-третьих, раз у ТСа непонятно, то можно рассмотреть в общем случае с нескольких серверов.

vodz ★★★★★
()

ТС, а узкое место то где? А то народ кинулся в предположения. Сколько времени выполняется скрипт из 100 таких строк и сколько из одной, двух? Самое простое для начала то, что Avial написал

vaddd ★☆
()
Последнее исправление: vaddd (всего исправлений: 1)

Научи скрипт принимать аргументы и запускай через parallel или аналоги.

entefeed ☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.