2011-07-01 8 views
6

セロリのデーモンに問題があります。変更をプッシュするたびにデーモンを再起動するためにファブリックデプロイメントスクリプトを使用しますが、何らかの理由でこれが大きな問題を引き起こしています。セロリのデーモンに関する問題

デプロイスクリプトが実行されるたびに、セロリプロセスは疑似デッド状態のままになります。彼らは(残念ながら)まだrabbitmqからタスクを消費しますが、実際には何もしません。紛らわしいことに、この状態ではすべてが「うまくいく」ように見えますが、celeryctlのステータスはオンラインで1つのノードしか表示されず、ps aux | grep celeryは2つの実行中のプロセスを表示します。

ただし、手動で以下のエラーが発生し停止/etc/init.d/celeryd実行しよう:

start-stop-daemon: warning: failed to kill 30360: No such process 

この状態でcelerydスタートを実行しようとしているときは正常に動作しているように見えますが、実際にはありません何もない。この問題を解決する唯一の方法は、実行中のセロリプロセスを手動で停止してから、それらを再度開始することです。

ここで何が起こっているのですか?私たちは完全な確認はしていませんが、何も展開されていない数日後に問題が発達していると考えています(現在はテストサーバーです)。

+0

デプロイスクリプトも使用しますが、ファブリックでは使用しません。単にpythonからシェルコマンドceleryd restartを実行するだけです。すべて正常に動作します。 私は、古いバージョンのubuntuを持つceleryd.shスクリプトのいくつかの問題を知っています。取得プロセスのためのbash命令のために10.10未満です。 実行しているOSはどれですか?どのバージョンのセロリ? –

+0

スクリプトはどのくらい正確にデーモンを再起動しますか?それはちょうど 'kill -9'または同様のものを放つのですか? –

+0

init.dスクリプトのstopコマンドを起動します。これは、セロリのgithub contribファイルから利用可能なインクルードされたinit.dスクリプトです。それは、停止してから開始するのではなく、再起動をトリガしていましたが、私は暗闇の中でそれをショットとして変更しました。 init.dスクリプトはstart-stop-daemonコマンドを呼び出します – John

答えて

5

私はあなたの設定が何であるか知っているとは言いませんが、私はいつもsupervisordを使ってセロリを食べました。おそらく問題はアップスタートと関係していますか?それにもかかわらず、私はスーパーバイザーの上を走っているセロリでこれを経験したことはありません。

良い測定のために、ここではセロリのためのサンプルのスーパーバイザーの設定です:私の工場のスクリプトで

[program:celeryd] 
directory=/path/to/project/ 
command=/path/to/project/venv/bin/python manage.py celeryd -l INFO 
user=nobody 
autostart=true 
autorestart=true 
startsecs=10 
numprocs=1 
stdout_logfile=/var/log/sites/foo/celeryd_stdout.log 
stderr_logfile=/var/log/sites/foo/celeryd_stderr.log 

; Need to wait for currently executing tasks to finish at shutdown. 
; Increase this if you have very long running tasks. 
stopwaitsecs = 600 

再起動celerydが、その後sudo supervisorctl restart celerydを発行するのと同じくらい簡単です。