我想檢查Gearman守護進程是否正在運行。只有運行任務才能讓應用程序不會崩潰。測試以查看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守護程序出現故障,而進程正在運行?我從PHP以下錯誤,當我打倒的Gearman守護程序:
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)