Я запускаю скрипт, который, в свою очередь, несколько раз вызывает другой скрипт в фоновом режиме с разными наборами параметров.
Вторичный скрипт сначала выполняет 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-секундной задержке между экземплярами в фоновом режиме.
wget
за раз? - person Fred Foo   schedule 18.12.2010