我有如下的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.
答案 0 :(得分:2)
基本上只是sudo('pserve --daemon development.ini', pty=False)
。结构使用的伪TTY对于分离过程不起作用。
http://docs.fabfile.org/en/1.5/faq.html#init-scripts-don-t-work
旁注,使用主管,新贵或其他一些真正的流程管理器而不是pserve --daemon
。如果你的过程死了,你就没有真正的方法知道使用这个seutp。
答案 1 :(得分:0)
您不需要:
run("sudo....")
Fabric有一种特殊的方法sudo()
。
因此,对于一个,您可以将该行重写为:
sudo("pserve development.ini --daemon")
其次,看起来它不是面料,它是pserve
本身。