Как коригирате wget от идващи данни за изтегляне, когато изпълнявате множество едновременни копия?

Изпълнявам скрипт, който на свой ред извиква друг скрипт няколко пъти във фонов режим с различни набори от параметри.

Вторичният скрипт първо прави wget на ftp url, за да получи списък с файлове на този url. Той извежда това към уникално име на файл.

Опростен пример:
Всеки от тях се извиква от отделно копие на вторичния скрипт, работещ във фонов режим.

wget --no-verbose 'ftp://foo.com/' -O '/downloads/foo/foo_listing.html' >foo.log

wget --no-verbose 'ftp://bar.com/' -O '/downloads/bar/bar_listing.html' >bar.log

Когато стартирам вторичния скрипт веднъж наведнъж, всичко се държи според очакванията. Получавам html файл със списък от файлове, връзки към тях и информация за файловете по същия начин, както бих направил, когато преглеждам ftp url през браузър.

Продължение опростени един по един (и очаквани) примерни резултати:

foo_listing.html:

...
<a href="/bgftp://foo.com/foo1.xml">foo1.xml</a> ...
<a href="/bgftp://foo.com/foo2.xml">foo2.xml</a> ...
...

bar_listing.html:

...
<a href="/bgftp://bar.com/bar3.xml">bar3.xml</a> ...
<a href="/bgftp://bar.com/bar4.xml">bar4.xml</a> ...
...

Когато стартирам вторичния скрипт много пъти във фонов режим, някои от получените файлове, въпреки че имат правилни базови URL адреси (този, който беше предаден), изброените файлове са от различно изпълнение на wget.

Продължаващи примерни резултати за опростена многопроцесорна обработка (и действителни):

foo_listing.html:

...
<a href="/bgftp://foo.com/bar3.xml">bar3.xml</a> ...
<a href="/bgftp://foo.com/bar4.xml">bar4.xml</a> ...
...

bar_listing.html
правилно, както по-горе

Колкото и да е странно, всички други файлове, които изтеглям, изглежда работят добре. Само тези файлове със списъци се объркват.

Текущото заобиколно решение е да се постави забавяне от 5 секунди между фоновите процеси. Само с тази една промяна всичко работи перфектно.


Някой знае ли как да поправя това?

Моля, не препоръчвайте да използвате някакъв друг метод за получаване на файловете със списък или да не работите едновременно. Бих искал всъщност да знам как да поправя това, когато използвам wget в много фонови процеси, ако е възможно.

РЕДАКТИРАНЕ:

Забележка:

Нямам предвид изхода за състоянието, който wget изхвърля на екрана. Изобщо не ме интересува това (това всъщност също се съхранява в отделни регистрационни файлове и работи правилно). Имам предвид данните, които wget изтегля от мрежата.

Освен това не мога да покажа точния код, който използвам, тъй като той е собственост на моята компания. Няма нищо "погрешно" в моя код, тъй като работи перфектно, когато поставя 5 секунди забавяне между фонови екземпляри.


person evan    schedule 18.12.2010    source източник
comment
Сигурни ли сте, че сте разбрали правилно кода за генериране на име на файл? Всичко ли работи според очакванията, когато изпълнявате едно wget наведнъж?   -  person Fred Foo    schedule 18.12.2010
comment
Да, текущото заобиколно решение въвежда забавяне от 5 секунди. Само с тази една промяна всичко работи според очакванията.   -  person evan    schedule 19.12.2010
comment
Само в случай, че не е ясно. Цялото генериране на имена на файлове се извършва правилно. Дори и да не беше, това би означавало, че всеки ред ще бъде правилен, когато се извежда във файла. Вместо това на всеки ред от файла някои части са последователно за един екземпляр на wget, а други части, последователно, са от друг екземпляр.   -  person evan    schedule 20.12.2010
comment
Примерите по-горе са толкова близки, колкото мога да дам. Както казах, всичко работи, стига да поставя забавяне между пускането на процесите. Не мога да покажа точния код, тъй като в него има частна информация, принадлежаща на моята компания.   -  person evan    schedule 21.12.2010


Отговори (1)


Регистрирайте грешка с Gnu, използвайте нещо друго за сега, когато е възможно, поставете времеви закъснения между едновременните изпълнения. Евентуално създайте обвивка за получаване на списъци с ftp директории, която позволява извличането само един по един.

:-/

person evan    schedule 05.01.2011