pwd以外のGNUパラレルファイルとデフォルトファイルはありますか?

pwd以外のGNUパラレルファイルとデフォルトファイルはありますか?

私は、タスクを要求するホストよりも強力なリモートホストで計算コストの高い変換を実行するためにGNU Parallelを使用しています。

。私はbashスクリプトを使っていて、/usr/local/lib/myscriptそれをリモートホストで使いたいです。しかし、ホストにこのスクリプトを要求したくないので--basefile

ファイル名だけを指定すると、すべてがうまくいきます。ただし、基本ファイルのフルパスを指定すると機能しません。

表示するには:

$ cat /tmp/common.sh
#!/usr/bin/env bash
echo "Hello world! from $(hostname)"

$ cd /tmp
$ parallel --nonall -S 2/user@remote-host --basefile common.sh --cleanup bash common.sh
Hello world! from remote-host

$ parallel --nonall -S 2/user@remote-host --basefile     /tmp/common.sh --cleanup "bash {}"
could not make way for new symlink: tmp
rsync error: some files could not be transferred (code 23) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-47/rsync/main.c(992) [sender=2.6.9]
cannot delete non-empty directory: tmp

--basefile現在のパス以外のファイルを使用する方法はありますか?それとも2番目のものを使用--trcし、パターンの使用{1}と交換を{2}シミュレートする必要がありますか--basefile

答え1

--basefile, --transfer-file, --transfer, --returnGNUパラレル(例:)のファイル転送はrsync/./マジックを使用します。したがって、送信を要求するとリモート側/tmp/common.shに送信されます。/tmp/common.shただし、転送を要求するとに/tmp/./common.sh送信されます。/tmp/common.sh$(pwd)/.

言い換えれば:

(local file) => (remote file)
dir/file => ./dir/file
/tmp/sub/dir/file => /tmp/sub/dir/file
/tmp/sub/./dir/file => ./dir/file

現在表示されているエラーは、リモートシステムのシンボリックリンクである/ tmpによって発生する可能性があります。

を使用すると、--workdir ...各タスクに新しい作業ディレクトリが作成されます。--basefileファイルは最初のジョブが実行される前にのみコピーされるため、機能しません。

代わりに、各ジョブに対してcommon.shを送信できます。

parallel --wd ... --tf {1} -S server 'pwd ; ls; echo {2}' ::: /tmp/./common.sh ::: foo bar

関連情報