php - MySQL 连接在并行 Cron 任务期间关闭

标签 php mysql zend-framework cron pdo

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

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

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

General error: 2006 MySQL server has gone away

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

最佳答案

阅读关于 pcntl_fork() 的评论后还有这个SO question ,这确实是 child 共享父连接的问题。我已经添加了这段代码以在 fork 后创建一个新的 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);

关于php - MySQL 连接在并行 Cron 任务期间关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309860/

相关文章:

javascript - 如何为 PhoneGap 创建服务器端登录?

php - 单个 Doctrine 连接表中的多个关系

PHP 正则表达式 : Problem with Smiley `:)` and `:))`

php - Javascript变量在空格后被 chop

mysql - 选择开始年份和开始月份到结束年份和结束月份之间的行?

php - Zend Form 添加错误信息

php - Zend Framework 1.11 与 Doctrine 2 集成

zend-framework - 如何从 Zend Navigation XML 向 <li> 添加类名

php - 有条件的 AppAssets

javascript - 使用 javascript 将表情符号放入文本区域