Не удается запустить удаленные задания GNU Parallel для файлов в каталоге (каталог не найден) - PullRequest
0 голосов
/ 10 октября 2018

Возникла проблема, когда не удалось запустить удаленные задания GNU Parallel для команды parallel, которая запускает задания в кластере узлов, когда переменная arg основана на списке файлов в каталоге, выводимых шаблоном glob.

Команда выглядит как

bcpexport() {
    <do some stuff to the given file arg $1 to BCP copy file contents to some MSSQL Server>
}
export -f bcpexport
parallel -q -j 10 --sshloginfile /path/to/list/of/nodes.txt --env $bcpexport \
    bcpexport {} "$TO_SERVER_ODBCDSN" $DB $TABLE $USER $PASSWORD $RECOMMEDED_IMPORT_MODE $DELIMITER \
    ::: "$DATAFILES/$TARGET_GLOB"

При запуске на одном узле все работает нормально;шаблон глобуса "$DATAFILES/$TARGET_GLOB" имеет форму /path/to/a/set/of/files/*.tsv (которая существует как ссылка NFS на общую файловую систему (которую я могу подтвердить, что она доступна со всех других узлов)).Однако при использовании опции --sshloginfile для удаленного выполнения на других узлах, вы увидите ошибку

/ bin / bash: строка 27: / path / to / a / set / of / files / *.tsv: Нет такого файла или каталога

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

Если кто-нибудь знает, что здесь происходит, будем благодарны за советы и предложения.

1 Ответ

0 голосов
/ 10 октября 2018

Обнаружено, что проблема заключалась в том, что при использовании опции -q (которая использовалась в команде для ввода аргумента "$TO_SERVER_ODBCDSN" в параллельное задание без разделения строковой переменной, в которой были пробелы).Сняв кавычки с переменной шаблона "$DATAFILES/$TARGET_GLOB", чтобы получить значение $DATAFILES/$TARGET_GLOB, мы решили проблему.

...