Gearman デーモンが実行されているかどうかを確認したい。そして、タスクを実行して、アプリケーションがクラッシュしないようにします。
これが私のコードです:
$daemonRunning = true;
while( true )
{
try
{
Yii::app()->gearman->client->ping( true );
if ( $daemonRunning === false )
{
echo "Daemon back online. Starting signature process...\n";
}
Yii::app()->gearman->client->runTasks();
}
catch( GearmanException $e )
{
echo "Daemon appears to be down. Waiting for it to come back up...\n";
$daemonRunning = false;
}
sleep(1);
}
しかし、問題はping
例外をスローせず、致命的なエラーをスローすることです:
PHP Error[2]: GearmanClient::ping(): flush(GEARMAN_COULD_NOT_CONNECT) 127.0.0.1:4730 -> libgearman/connection.cc:673
奇妙なことに、 を削除ping
して のみを使用するとrunTasks
、例外がスローされます。
関連している:
プロセスの実行中に Gearman デーモンがダウンした場合のエラーを処理するにはどうすればよいですか? Gearman デーモンを停止すると、PHP から次のエラーが表示されます。
php: libgearman/universal.cc:481: gearman_return_t connection_loop(gearman_universal_st&, const gearman_packet_st&, Check&): Assertion `&con->_packet == universal.packet_list' failed.
Aborted (core dumped)