Gearman Job ServerからすべてのGearmanジョブを削除する方法はありますか?Gearmanジョブをバックグラウンドで実行するPHPアプリケーションがあります。私の単体テストでは、a)それを実行するワーカーを待っているジョブがないこととb)作業しているワーカーがいないことを確認する必要があります。後者は労働者を殺すのが簡単なのでそれほど重要ではありませんが、前者はこれを実装する方法がわかりません。
質問する
18045 次
2 に答える
34
単一タイプのすべてのジョブを削除する
次のコマンドを使用します(置換するだけですFUNCTION_NAME
)。
gearman -n -w -f FUNCTION_NAME > /dev/null
数のジョブのみを削除するには、 paramn
を追加します。つまり、20個のジョブを削除します。-c n
gearman -c 20 -n -w -f FUNCTION_NAME > /dev/null
サーバーからすべてのジョブを削除する
すべてのジョブを削除する場合は、次のループを実行します。
for MATCH in $(echo status | nc 127.0.0.1 4730 | grep -v \\. | grep -Pv '^[^\t]+\t0\t' | cut -s -f 1-2 --output-delimiter=\,);
do
gearman -n -w -f ${MATCH%\,*} -c ${MATCH#*\,} > /dev/null;
done
127.0.0.1 4730
ギアマンドサーバーのアドレスとポートに
置き換えます。
ps:永続ストレージ(つまりsqlite)からジョブを削除しても、再起動するまでギアマンドからジョブが削除されません(ギアマンドプロセスにはメモリ内キャッシュがあるため)
于 2012-01-13T12:00:13.793 に答える
0
キューの永続化を使用すると、キューテーブルを切り捨てるだけで簡単にできます。
于 2011-08-31T13:43:54.410 に答える