我想在本地计算机和远程计算机上执行我的
script.sh
。但是,在本地计算机上,script.sh
文件位于 ~/dir1/
内,而在远程计算机上,/dir2
内。
我尝试的是:在我运行的本地计算机上
~/dir1/
内部:
parallel --workdir /dir2 -S remotemachine -S : ./script.sh ::: someargs
在远程机器上运行良好,但在本地机器上并行也尝试在
script.sh
内部运行/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
编辑20240422
您现在可以使用
--plus
:
parallel -S localhost,server1,otheruser@server2 --plus echo host:{host} sshlogin:{sshlogin}
这些字符串将被 shell 将评估的
$PARALLEL_SSHHOST
和 $PARALLEL_SSHLOGIN
替换。