5

複数のホストで負荷生成実験を開始するためのスクリプトを作成しています。複数のsshセッションを開始するbashスクリプトを書くことはできましたが、もっと構造化されたものを使用したいと思っていました。私はほとんどのスクリプトにPythonを使用しているので、Fabricは良いオプションのように思えました。

唯一の問題は、各コマンドで少量のホスト固有のデータ(実際にはIDまたはカウンターのみ)を渡す必要があり、それらを並行して実行したいということです。

つまり、次のようなことをしたいと思います。ここで、host_numは、ホストごとに異なります(場合によってはインクリメントされます)。

@parallel
def launch():
    with cd('/working/dir'):
        run("./start/script -id=%d", host_num)

これはFabricで可能ですか?そうでない場合、同じことを達成するために使用できる別のツールはありますか?

4

2 に答える 2

3

ユーザー/ホストに対して確認できます。各タスクは、現在実行されている環境について認識しています。

env.hosts = ['user@host1.com', 'user@host2.com']

@task
def test():
    print '%(user)s@%(host)s' % (env)

    if env.host == 'host1.com':
        id = 1
    elif ...

    run('echo "%s"' % (id))

よりエレガントな方法で自由に書いてください:)(IDルックアップのcaseステートメントと同様に使用される辞書であるという1つの提案)

于 2012-07-22T18:45:43.747 に答える
2

タスク内で実行しているホストについて内省したい場合は、env.host変数を参照することをお勧めします。各タスクは環境状態を認識していますが、並行して、すべてフォークとして実行されているため、この状態を共有しません。他にも多くのenv変数を自由に使用できます。

于 2012-07-22T18:41:42.813 に答える