代码之家  ›  专栏  ›  技术社区  ›  lampShadesDrifter

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

  •  1
  • lampShadesDrifter  · 技术社区  · 6 年前

    --sshloginfile )发现即使作业作为同一个用户在每台机器上运行(或者至少在提供给 --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

    /bin/bash:line 27:/path/to/file001:权限被拒绝

    /bin/bash:line 27:/path/to/file002:权限被拒绝

    …等等所有的文件。。。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ole Tange    6 年前

    我认为问题是额外的美元:

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

    除非设置shell变量 $bcpexport 可能是你的意思 bcpexport (没有$)代替。

    如果 如果未定义,则它将被shell替换为nothing。因此 --env

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

    它将执行 {} 作为命令,这正是你所经历的。

    所以试试这个:

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