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

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

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

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

在远程机器上运行良好,但在本地机器上并行也试图运行script.sh里面/dir2

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

所以GNU并行没有办法让--workdir根据服务器的不同而不同(除了相对的dirs --workdir和…之外)。

那么你能做什么呢?

如果其中一个dirs只存在于其中一台机器上,那么您可以在运行该脚本之前先cd 。 在没有dir的机器上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设置为包含两个dirs:

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