存在一个问题,当变化的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返回的文件列表中的文件名获取(在单节点模式下运行时一样))。
如果任何人都知道这里发生了什么,将不胜感激。
答案 0 :(得分:1)
发现问题是,在使用-q
选项时(命令中使用该选项将"$TO_SERVER_ODBCDSN"
arg引入并行作业而不拆分其中有空格的字符串变量) )。取消引用"$DATAFILES/$TARGET_GLOB"
全局模式变量为$DATAFILES/$TARGET_GLOB
即可解决此问题。