在不同主机上并行和后台执行Fabric函数

3 投票
1 回答
2467 浏览
提问于 2025-04-17 15:53

之前也有人问过类似的问题,但没有解决我的情况。

我有这样的代码:

from fabric.api import *
env.rolesdefs = {'server1' : [me@312312], 'server2' : [me@978978]}

@roles('server1')
def run_task1():
    do_stuff_forever

@roles('server2')
def run_task2():
    do_other_stuff_forever        

因为这个*_forever的特性,我无法顺序运行它们。task2在server2上永远不会启动。我该如何在两个不同的服务器上同时启动它们呢?

我尝试过:

def run_all():
    execute(run_task1)
    execute(run_task2)

@parallel这个装饰器没有用。我试过这里提到的建议 fabric常见问题。由于我只有screen可用,我找不到如何同时启动两个screen会话的方法。

我想,先把第一个放在后台运行能解决我的问题吗?我该如何可靠地把task1放到后台呢?我现在用的是fabric 1.4和python 2.6。

谢谢你的帮助。

附言:我想避免用shell脚本来分别在后台运行这两个任务的明显方法:

#! /bin/bash
fab run_task1 &
fab run_task2 &

1 个回答

-1

如果你设置了

env.parallel = True

这样做有帮助吗?

撰写回答