我想在本地机器和远程机器上执行我的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