我在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应直接传递命令。
答案 0 :(得分:2)
也许我参加派对的时间已经很晚了,如果这不起作用你就可以投票给我,但是我在/etc/init.d中运行其他程序时遇到了类似的问题。我的解决方案(与tomcat和mysql一起使用)是添加pty=False
@task
def restart():
sudo('/etc/init.d/celeryd restart', pty=False)
关于此选项的Theres文档:
http://docs.fabfile.org/en/1.7/api/core/operations.html#fabric.operations.run