2

私は以下のようにfabfileを持っています。手動でリモートサーバーにSSHで接続し、fabfileとまったく同じようにコマンドを実行すると、正常に機能します。ただし、fabfileを実行すると、手動で実行した場合と同じ進行状況が出力され、エラーは報告されず、「done」で終了しますが、最後の行は実際には機能しません。どんなアドバイスも素晴らしいでしょう。

アップデート:

pserveログを調整し、fabfileをさらに数回試した後、ランダムに1回機能しました。何も変わっておらず、その後実行したところ、機能しませんでした。だから私は何が起こっているのか分かりません。タイミングの問題ですか?

コードは次のとおりです。

# 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)。ファブリックが使用する疑似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....")

ファブリックにはそのための特別な方法がありsudo()ます。したがって、1つには、その行を次のように書き直すことができます。

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

第二に、それはファブリックではなく、pserveそれ自体であるように見えます。

于 2013-03-26T12:44:19.280 に答える