如何在 GNU 并行中为不同的主机使用不同的 --workdir

How to use different --workdir for different hosts in GNU parallel

我想在本地机器和远程机器上执行我的 script.sh。但是,在本地机器上 script.sh 文件在 ~/dir1/ 内,在远程机器上在 /dir2.

我尝试的是:在 ~/dir1/ 本地机器上我 运行:

  parallel --workdir /dir2 -S remotemachine -S : ./script.sh ::: someargs

在远程机器上 运行 没问题,但在本地机器上并行也尝试 运行 script.sh inside /dir2

作业不知道它将在哪个服务器上 运行。这是(除其他外)由于 --retries 将重试相同的作业,但在不同的服务器上。

因此 GNU Parallel 无法根据服务器使 --workdir 不同(除了相关目录:. 和 ...)。

那你可以做什么呢?

如果其中一个目录仅存在于其中一台机器上,那么您可以 cd 在 运行 执行脚本之前访问该目录。 cd 将在没有目录的机器上失败:

parallel -S server1,: 'cd dir-on-both; cd dir-on-one; script.sh' ::: some args

使用通用符号链接:

ssh server1 ln -s dir1 link1 
ln -s dir2 link1
parallel --workdir link1/ -S server1,: script.sh ::: some args

如果只是因为可执行文件,设置 PATH 以包括两个目录:

PATH=$PATH:dir1:dir2
parallel --env PATH -S server1,: script.sh ::: some args