无法为目录(找不到目录)中的文件运行远程GNU Parallel作业

时间:2018-10-09 22:28:28

标签: gnu-parallel

存在一个问题,当变化的arg基于glob模式输出的目录中的文件列表时,无法运行parallel命令的远程GNU Parallel作业,该命令在节点群集上运行作业。

命令看起来像

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:无此类文件或目录

好像函数正在将自身的glob模式作为文件名获取(而不是从glob返回的文件列表中的文件名获取(在单节点模式下运行时一样))。

如果任何人都知道这里发生了什么,将不胜感激。

1 个答案:

答案 0 :(得分:1)

发现问题是,在使用-q选项时(命令中使用该选项将"$TO_SERVER_ODBCDSN" arg引入并行作业而不拆分其中有空格的字符串变量) )。取消引用"$DATAFILES/$TARGET_GLOB"全局模式变量为$DATAFILES/$TARGET_GLOB即可解决此问题。