5

我正在编写一个脚本来在多个主机上启动负载生成实验。我可以编写一个 bash 脚本来启动多个 ssh 会话,但我希望使用更结构化的东西。因为我的大部分脚本都使用 Python,所以我认为Fabric看起来是一个不错的选择。

唯一的问题是我需要为每个命令传递少量的主机特定数据(实际上只是一个 id 或计数器),我想并行运行它们。

换句话说,我想做类似以下的事情,其中​​每个主机的 host_num 是不同的(可能只是增加了)。

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

这在织物中可能吗?如果没有,我可以使用其他工具来完成同样的事情吗?

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 语句的字典)

于 2012-07-22T18:45:43.747 回答
2

如果您想对任务中正在运行的主机进行一些内省,我建议您引用 env.host 变量。每个任务都知道它的环境状态,尽管它们并行不共享这种状态,因为它们都作为分叉运行。还有许多其他环境变量可供您使用。

于 2012-07-22T18:41:42.813 回答