Я недавно обнаружил xargs --max-procs
характерная черта.
Как можно разделить вывод команды по процессу? Должен ли я просто создать mycommand --logfile $LOGFILE
, или можно из самого xargs?
Пример (для вомбла):
Предположим, у меня есть скрипт myprocessor.sh и список файлов. Они могут идти в любом порядке, но я хочу вести журнал для каждого отдельно, а затем:
find $MY_FILE_TREE --print0 | xargs --null --max-procs 3 --max-args 1 --no-run-if-empty myprocess.sh
может быть параллельное задание, которое я хочу запустить. Если myprocessor.sh
болтлив, то я хотел бы иметь возможность выводить каждый вызов в отдельный журнал. В противном случае стандартный вывод для каждого будет одинаковым, и журналы будут беспорядочными.
GNU Parallel http://www.gnu.org/software/parallel/ похоже, сделано для вас, потому что он автоматически правильно объединяет стандартный вывод процессов.
find $MY_FILE_TREE --print0 | parallel --null --max-procs 3 --max-args 1 --no-run-if-empty myprocess.sh ">" {}.output
или короче:
find $MY_FILE_TREE --print0 | parallel -0 -j3 -r myprocess.sh ">" {}.output
Посмотрите вступительное видео: http://www.youtube.com/watch?v=OpaiGYxkSuQ
Вы можете сделать это, запустив команду xargs через оболочку - это позволит вам перенаправить вывод - примерно так:
find blah -type f | xargs -I{} -P 4 -n 1 sh -c 'yourcommand --input {} > {}.output'
... вам, вероятно, придется немного подправить его - xargs заменяет {} элементом / файлом, над которым работает
Вы могли бы изменить свой скрипт, чтобы при запуске он выбирал случайное число / текст, а затем префикс каждой строки этим номером? Затем вы можете позже разделить его с помощью grep.