远程GNU并行作业获取“ / bin / bash:权限被拒绝”

时间:2018-10-10 00:33:17

标签: gnu-parallel

在分布式模式下(即通过--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:权限被拒绝

     

...所有文件等等...

如果有人知道这里可能发生的情况,将不胜感激建议或调试建议。

1 个答案:

答案 0 :(得分:0)

我认为问题是附加的$:

parallel [...] --env $bcpexport bcpexport {} [...]

除非您将shell变量$bcpexport设置为您可能要使用bcpexport(没有$)的值。

如果$bcpexport未定义,那么它将被shell替换为空。因此--env将吃掉下一个参数,因此您将真正在运行:

parallel [...] --env bcpexport {} [...]

它将作为命令执行{},这正是您所遇到的。

因此,请尝试以下操作:

parallel [...] --env bcpexport bcpexport {} [...]