Возникла проблема, когда не удалось запустить удаленные задания 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: Нет такого файла или каталога
, как если бы функция получала сам шаблон глобуса как имя файла (а не имя файла из списка файлов, возвращаемых глобусом (как он себя ведет)при работе в одноузловом режиме)).
Если кто-нибудь знает, что здесь происходит, будем благодарны за советы и предложения.