1

セロリを珍しい方法で使用しています-セロリの開始時にカスタムプロセスを作成しています.このプロセスは、セロリの実行中は常に実行されている必要があります. Celery ワーカーは、このプロセスをタスクに使用します (詳細は不要です)。

コマンドラインからセロリを実行しましたが、すべて問題ありません。

celery -A celery_jobs.tasks.app worker -B --loglevel=warning

しかし、celerydセロリをデーモン化するために使用すると、それを止める方法がありません。コマンドceleryd stopはセロリを停止しようとしますが、終了しません。

どちらの場合もプロセス ツリーを確認すると、違いがあります。コマンド ラインから実行する場合、親は明らかにセロリ プロセスです (子としてセロリ ワーカーを持つメイン プロセス)。親のセロリ プロセスを強制終了 (停止) すると、すべてのセロリ ワーカーとカスタム プロセスが停止します。

しかし、で実行するとceleryd、カスタムプロセスに親が/sbin/initあり、呼び出しceleryd stopが機能していません。メインのセロリプロセスが何かを待っているか、セロリの子プロセスではないため、カスタムプロセスを停止できないようです。

私はプロセスについてあまり知りませんし、何を検索すればよいのかわからないため、情報を見つけるのは簡単ではありません。そのため、ヒントをいただければ幸いです。

4

2 に答える 2

2

私は同じ問題を抱えていました。迅速な解決策が必要だったので、このbashスクリプトを書きました

#/bin/bash

/etc/init.d/celeryd stop
sleep 10
export PIDS=`ps -ef | grep celery |grep -v 'grep' | awk '{print $2}'`
for PID in $PIDS; do kill -9 $PID; done;

10秒経っても処理が止まらない場合は長時間停止候補なので急遽停止することにしました

于 2014-06-16T13:56:23.597 に答える