Возникла проблема, из-за которой невозможно запустить удаленные задания GNU Parallel для команды parallel
, которая запускает задания в кластере узлов, когда переменный аргумент основан на списке файлов в каталоге, выводимом шаблоном 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"
glob имеет вид /path/to/a/set/of/files/*.tsv
(который существует как ссылка NFS на общую файловую систему (которая, как я могу подтвердить, доступна со всех других узлов)). Однако при использовании опции --sshloginfile
для удаленного выполнения на других узлах см. ошибку
/bin/bash: строка 27: /path/to/a/set/of/files/*.tsv: Нет такого файла или каталога
как будто функция получает сам шаблон глобуса как имя файла (а не имя файла из списка файлов, возвращаемых глобусом (как это происходит при работе в одноузловом режиме)).
Если кто-нибудь знает, что здесь происходит, советы и предложения будут оценены.