远程 GNU 并行作业获取“/bin/bash:权限被拒绝”
Remote GNU Parallel job gets "/bin/bash: Permission denied"
遇到问题 运行 分布式模式下的 GNU 并行作业(即通过 --sshloginfile
跨多台机器)并发现即使每个作业都 运行机器作为同一用户(或至少在文件中以这种方式指定给 --sshloginfile
(例如 myuser@myhostname00x)),当作业尝试访问文件时出现 "Permission denied" 错误。尽管能够(无密码)ssh 到有问题的远程节点和 ls
并行作业声称它没有权限的文件(指定的路径是共享的文件系统,并且 NFS 安装在所有节点)。
有一个像
这样的节点列表文件
me@host001
me@host005
me@host006
实际的并行作业看起来像
bcpexport() {
<do stuff to arg 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
全局模式 returns 文件来自目录。 运行 此作业在单节点模式下工作正常,但是当 运行 跨并行-nodes.txt 文件中的所有节点抛出
/bin/bash: line 27: /path/to/file001: Permission denied
/bin/bash: line 27: /path/to/file002: Permission denied
...and so on for all the files...
如果有人知道这里会发生什么,建议或调试建议将不胜感激。
我认为问题在于额外的 $:
parallel [...] --env $bcpexport bcpexport {} [...]
除非您将 shell 变量 $bcpexport
设置为您可能想要的 bcpexport
(无 $)。
如果$bcpexport
未定义,则shell将替换为空。因此 --env
会吃掉下一个参数,所以你真的会 运行:
parallel [...] --env bcpexport {} [...]
这将执行 {}
作为命令,这正是您所经历的。
所以试试这个:
parallel [...] --env bcpexport bcpexport {} [...]
遇到问题 运行 分布式模式下的 GNU 并行作业(即通过 --sshloginfile
跨多台机器)并发现即使每个作业都 运行机器作为同一用户(或至少在文件中以这种方式指定给 --sshloginfile
(例如 myuser@myhostname00x)),当作业尝试访问文件时出现 "Permission denied" 错误。尽管能够(无密码)ssh 到有问题的远程节点和 ls
并行作业声称它没有权限的文件(指定的路径是共享的文件系统,并且 NFS 安装在所有节点)。
有一个像
这样的节点列表文件me@host001
me@host005
me@host006
实际的并行作业看起来像
bcpexport() {
<do stuff to arg 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
全局模式 returns 文件来自目录。 运行 此作业在单节点模式下工作正常,但是当 运行 跨并行-nodes.txt 文件中的所有节点抛出
/bin/bash: line 27: /path/to/file001: Permission denied
/bin/bash: line 27: /path/to/file002: Permission denied
...and so on for all the files...
如果有人知道这里会发生什么,建议或调试建议将不胜感激。
我认为问题在于额外的 $:
parallel [...] --env $bcpexport bcpexport {} [...]
除非您将 shell 变量 $bcpexport
设置为您可能想要的 bcpexport
(无 $)。
如果$bcpexport
未定义,则shell将替换为空。因此 --env
会吃掉下一个参数,所以你真的会 运行:
parallel [...] --env bcpexport {} [...]
这将执行 {}
作为命令,这正是您所经历的。
所以试试这个:
parallel [...] --env bcpexport bcpexport {} [...]