さて、私はこの質問を投稿しました、今私はそれに良い答えを見つけたと思います。
Net_Gearman_Workerのコードを見ると、作業ループで関数stopWorkが監視されており、trueが返された場合は、関数が終了していることがわかります。
次のことを行い
ました。memcacheを使用して、キャッシュされた値gearman_restarttimeを作成し、別のスクリプトを使用して、サイトを更新するたびに現在のタイムスタンプに設定しました。(私はMemcacheを使用しましたが、これはデータベース、ファイルなど、どこにでも保存できます)。
私はWorkerクラスを基本的にNet_Gearman_Worker_Fooに拡張し、すべてのワーカーにそれをインスタンス化させました。Fooクラスでは、stopWork関数をオーバーライドして、次のことを行います。まず、gearman_restarttimeをチェックします。初めて、値をグローバル変数に保存します。それ以降、毎回、キャッシュされた値をグローバルと比較します。変更された場合、stopWorkはtrueを返し、ワーカーは終了します。cronは毎分チェックして、各ワーカーがまだ実行されているかどうかを確認し、終了したワーカーを再起動します。
stopWorkにもタイマーを設定し、x分ごとに1回だけキャッシュをチェックすることをお勧めします。私たちの場合、Memcacheは十分に高速なので、毎回値をチェックすることは問題ではないようですが、他のシステムを使用して現在のタイムスタンプを保存している場合は、チェックの頻度を減らす方がよいでしょう。