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

多分私はパーティーにかなり遅れており、これがうまくいかない場合は反対票を投じることができますが、ファブリックを使用して /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 に答える