Как вы исправляете wget от смешивания данных загрузки при запуске нескольких одновременных экземпляров?

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

Вторичный скрипт сначала выполняет wget по URL-адресу ftp, чтобы получить список файлов по этому 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-файл со списком файлов, ссылками на них и информацией о файлах так же, как при просмотре URL-адреса ftp через браузер.

Продолжение упрощенного примера (и ожидаемых результатов) по одному за раз:

foo_listing.html:

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

bar_listing.html:

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

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

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

foo_listing.html:

...
<a href="ftp://foo.com/bar3.xml">bar3.xml</a> ...
<a href="ftp://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