3

我在 OS X 10.8.2 上使用 Fabric 1.6.0,在 Ubuntu Lucid 10.04 上的远程主机上运行命令。

在服务器上,我可以运行sudo /etc/init.d/celeryd restart以重新启动 Celery 服务。

我使用以下命令通过结构传递相同的命令:

@task
def restart():
    run('sudo /etc/init.d/celeryd restart')

或者

@task
def restart2():
    sudo('/etc/init.d/celeryd restart')

或者使用命令行形式fab <task_that_sets_env.host> -- sudo /etc/init.d/celeryd restart

该命令总是默默地失败——这意味着结构没有返回错误,但 celeryd 报告它没有运行。

我在这里扯头发!Celery 日志文件中没有任何相关内容,AFAIK Fabric 应该直接传递命令。

4

1 回答 1

2

也许我参加聚会已经很晚了,如果这不起作用,你可以对我投反对票,但是我在使用 fabric 运行 /etc/init.d 中的其他程序时遇到了类似的问题。我的解决方案(适用于 tomcat 和 mysql)是添加pty=False

@task
def restart():
    sudo('/etc/init.d/celeryd restart', pty=False)

这里有关于该选项的文档:

http://docs.fabfile.org/en/1.7/api/core/operations.html#fabric.operations.run

于 2013-08-22T05:24:33.433 回答