2017-07-22 25 views
2

我想在本地機器和遠程機器上執行我的script.sh。但是,在本地機器上,script.sh文件位於~/dir1/內,在遠程機器上位於/dir2內。如何在GNU並行中爲不同的主機使用不同的--workdir

我試過了:裏面~/dir1/本地計算機上我運行:

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

在遠程機器上運行良好,但在本地機器並行還試圖運行script.sh/dir2

回答

1

作業未知道它將在哪個服務器上運行。這是(除其他外)由於--retries將重試相同的工作,但在不同的服務器上。

因此,GNU並行沒有辦法使--workdir取決於服務器(除了相對目錄:。和...之外)有所不同。

那麼可以代替嗎?

如果其中一個dirs只存在於其中一臺機器上,那麼您可以在運行該腳本之前即可使用cd。該cd將失敗的計算機上不具備DIR:

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

我喜歡你所有的建議,但對我來說最簡單的是第一個。作爲提示,我將cd stderr重定向到/ dev/null 'parallel -S server1,:'cd dir-on-both; cd dir-on-one 2>/dev/null; script.sh':::一些參數' – user3762200

相關問題