1

我总是使用结构将我的流程从本地 PC 部署到远程服务器。

如果我有这样的 python 脚本:

测试.py:

import time
while True:
    print "Hello world."
    time.sleep(1)

显然,这个脚本是一个连续运行的脚本。我将此脚本部署到远程服务器并执行我的结构脚本,如下所示:

...
sudo("python test.py")

Fabric 会一直等待 test.py 的返回,不会退出。如何立即停止 fabric 脚本,忽略 test.py 的返回

4

3 回答 3

3

通常对于这种异步任务处理,Celery是首选。 详细解释了Celery和Fabric一起使用。

from fabric.api import hosts, env, execute,run
from celery import task

env.skip_bad_hosts = True
env.warn_only = True

@task()
def my_celery_task(testhost):
    host_string = "%s@%s" % (testhost.SSH_user_name, testhost.IP)

    @hosts(host_string)
    def my_fab_task():
        env.password = testhost.SSH_password
        run("ls")

    try:
        result = execute(my_fab_task)
        if isinstance(result.get(host_string, None), BaseException):
            raise result.get(host_string)
    except Exception as e:
        print "my_celery_task -- %s" % e.message
于 2013-06-05T09:10:10.567 回答
1

sudo("python test.py 2>/dev/null >/dev/null &")

或将输出重定向到其他文件而不是 /dev/null

于 2013-06-05T08:49:10.813 回答
0

这段代码对我有用:

fabricObj.execute("(nohup python your_file.py > /dev/null < /dev/null &)&")

fabricObj与织物代码相关的织物类(内部定义)的对象在哪里。

于 2016-09-13T11:31:39.910 回答