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

问题描述 投票:0回答:1

我想在本地计算机和远程计算机上执行我的

script.sh
。但是,在本地计算机上,
script.sh
文件位于
~/dir1/
内,而在远程计算机上,
/dir2
内。

我尝试的是:在我运行的本地计算机上

~/dir1/
内部:

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

在远程机器上运行良好,但在本地机器上并行也尝试在

script.sh
内部运行
/dir2

linux ssh gnu-parallel
1个回答
3
投票

作业不知道它将在哪台服务器上运行。这是(除其他外)由于

--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

编辑20240422

您现在可以使用

--plus
:

parallel -S localhost,server1,otheruser@server2 --plus echo host:{host} sshlogin:{sshlogin}

这些字符串将被 shell 将评估的

$PARALLEL_SSHHOST
$PARALLEL_SSHLOGIN
替换。

© www.soinside.com 2019 - 2024. All rights reserved.