在分布式模式下(即通过--sshloginfile
在多台机器上)运行GNU并行作业并发现即使该作业以同一用户身份在每台机器上运行(或至少有规定)时也存在问题这样,在将文件分配给--sshloginfile
时(例如,myuser @ myhostname00x),当作业尝试访问文件时,将收到“权限被拒绝”错误。尽管能够(无密码)ssh进入有问题的远程节点和ls
并行作业声称没有权限的文件(指定路径是共享的文件系统,并且在所有节点)。
有一个像这样的节点的列表文件
me@host001
me@host005
me@host006
实际的并行作业看起来像
bcpexport() {
<do stuff to arg $1 to BCP copy to a MSSQL DB>
}
export -f bcpexport
parallel -q -j 10 --sshloginfile $basedir/src/parallel-nodes.txt --env $bcpexport \
bcpexport {} "$TO_SERVER_ODBCDSN" $DB $TABLE $USER $PASSWORD $RECOMMEDED_IMPORT_MODE $DELIMITER \
::: $DATAFILES/$TARGET_GLOB
其中$DATAFILES/$TARGET_GLOB
全局模式从目录返回文件。在单节点模式下运行此作业效果很好,但在parallel-nodes.txt文件中的所有节点上运行时都会抛出
/ bin / bash:第27行:/ path / to / file001:权限被拒绝
/ bin / bash:第27行:/ path / to / file002:权限被拒绝
...所有文件等等...
如果有人知道这里可能发生的情况,将不胜感激建议或调试建议。
答案 0 :(得分:0)
我认为问题是附加的$:
parallel [...] --env $bcpexport bcpexport {} [...]
除非您将shell变量$bcpexport
设置为您可能要使用bcpexport
(没有$)的值。
如果$bcpexport
未定义,那么它将被shell替换为空。因此--env
将吃掉下一个参数,因此您将真正在运行:
parallel [...] --env bcpexport {} [...]
它将作为命令执行{}
,这正是您所遇到的。
因此,请尝试以下操作:
parallel [...] --env bcpexport bcpexport {} [...]