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