无法 运行 对目录中的文件进行远程 GNU 并行作业(未找到目录)
Can't run remote GNU Parallel jobs for files in a directory (directory not found)
遇到无法 运行 远程 GNU 并行作业的 parallel
命令的问题,当 varying arg 基于列表时,运行 节点集群上的作业由 glob 模式输出的目录中的文件数。
命令看起来像
bcpexport() {
<do some stuff to the given file arg 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 link 存在(我可以确认可以从所有其他节点访问))。但是在其他节点使用--sshloginfile
选项远程执行时,看到报错
/bin/bash: line 27: /path/to/a/set/of/files/*.tsv: No such file or directory
就好像该函数正在将 glob 模式本身作为文件名(而不是从 glob 返回的文件列表中获取文件名(因为它在 运行ning 处于单节点模式时的表现)).
如果有人知道这里发生了什么,将不胜感激。
发现问题是当使用 -q
选项时(在命令中使用它来将 "$TO_SERVER_ODBCDSN"
arg 引入并行作业而不拆分有空格的字符串变量在里面)。取消引用 "$DATAFILES/$TARGET_GLOB"
glob 模式变量只是 $DATAFILES/$TARGET_GLOB
解决了问题。
遇到无法 运行 远程 GNU 并行作业的 parallel
命令的问题,当 varying arg 基于列表时,运行 节点集群上的作业由 glob 模式输出的目录中的文件数。
命令看起来像
bcpexport() {
<do some stuff to the given file arg 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 link 存在(我可以确认可以从所有其他节点访问))。但是在其他节点使用--sshloginfile
选项远程执行时,看到报错
/bin/bash: line 27: /path/to/a/set/of/files/*.tsv: No such file or directory
就好像该函数正在将 glob 模式本身作为文件名(而不是从 glob 返回的文件列表中获取文件名(因为它在 运行ning 处于单节点模式时的表现)).
如果有人知道这里发生了什么,将不胜感激。
发现问题是当使用 -q
选项时(在命令中使用它来将 "$TO_SERVER_ODBCDSN"
arg 引入并行作业而不拆分有空格的字符串变量在里面)。取消引用 "$DATAFILES/$TARGET_GLOB"
glob 模式变量只是 $DATAFILES/$TARGET_GLOB
解决了问题。