2

我有如下的fabfile。当我手动 ssh 到远程服务器并完全按照 fabfile 执行命令时,它工作正常。但是,当我运行 fabfile 时,它​​输出与手动运行时相同的进度,不报告错误并以“完成”退出,但最后一行实际上不起作用。任何建议都会很棒。

更新:

在跟踪 pserve 日志并再尝试几次 fabfile 之后,它随机工作了一次。什么都没有改变,当我随后运行它时,它没有工作。所以我不知道发生了什么。是时间问题吗?

这是代码:

# kills a running pserve process and restarts it in daemon mode

from fabric.api import *

def deploy():
    pid = run("pidof -x pserve")  # works
    run("sudo kill -15 %s" % pid)  # works
    with cd('~/Repos/bessie'):
        run("sudo pserve development.ini --daemon")  # outputs "Entering
                                                     # daemon mode" but doesn't
                                                     # actually start the process

输出:

[ec2-xxx.ap-southeast-2.compute.amazonaws.com] Executing task 'deploy'
[ec2-xxx.ap-southeast-2.compute.amazonaws.com] run: pidof -x pserve
[ec2-xxx.ap-southeast-2.compute.amazonaws.com] out: 28998
[ec2-xxx.ap-southeast-2.compute.amazonaws.com] out: 

[ec2-xxx.ap-southeast-2.compute.amazonaws.com] run: sudo kill -15 28998
[ec2-xxx.ap-southeast-2.compute.amazonaws.com] run: sudo pserve development.ini --daemon
[ec2-xxx.ap-southeast-2.compute.amazonaws.com] out: Entering daemon mode
[ec2-xxx.ap-southeast-2.compute.amazonaws.com] out: 


Done.
4

2 回答 2

2

基本上只是sudo('pserve --daemon development.ini', pty=False)。Fabric 使用的伪 TTY 不能很好地用于分离过程。

http://docs.fabfile.org/en/1.5/faq.html#init-scripts-don-t-work

旁注,使用主管、新贵或其他一些真正的流程管理器,而不是pserve --daemon. 如果您的进程终止,您将无法真正了解如何使用此 seutp。

于 2013-03-26T19:55:05.363 回答
0

你不需要:

 run("sudo....")

Fabric对此有一种特殊的方法,sudo(). 因此,首先,您可以将该行重写为:

sudo("pserve development.ini --daemon")

其次,它看起来不是织物,而是它pserve本身。

于 2013-03-26T12:44:19.280 回答