并行Cron任务期间的MySQL连接关闭

时间:2011-06-10 17:17:08

标签: php mysql zend-framework cron pdo

我基于这两篇博客文章为并行任务编写了基于Zend Framework的cron服务:

总之,cron服务使用pcntl_fork()并行生成任务。

使用该服务运行单个任务没有问题,但是当我添加第二个任务时,我得到了这个MySQL错误:

  

一般错误:2006 MySQL服务器已经消失

我最好的猜测是,子线程在另一个之前结束,并且MySQL连接被隐式关闭。如果是这种情况,如何在父线程关闭之前确保连接保持打开状态?

1 个答案:

答案 0 :(得分:1)

在阅读pcntl_fork()SO question上的评论后,确实存在与孩子共享父联系的问题。我已经添加了这段代码来在分叉后创建一个新的MySQL连接,它似乎解决了这个问题:

// give this thread its own db connection
$settings = Zend_Registry::get('settings');
$db = Zend_Db::factory(
    $settings->db_adapter,
    array(
        'host' => $settings->db_host,
        'username' => $settings->db_user,
        'password' => $settings->db_pass,
        'dbname' => $settings->db_name,
    )
);
$db->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Db_Table::setDefaultAdapter($db);