Закрытие соединения MySQL во время параллельных задач Cron
Я написал службу cron на основе Zend Framework для параллельных задач на основе этих двух статей в блоге:
Таким образом, сервисы cron используют pcntl_fork()
порождать задачи параллельно.
Запуск одной задачи со службой работает без проблем, но когда я добавляю вторую задачу, я получаю эту ошибку MySQL:
Общая ошибка: 2006 сервер MySQL ушел
Мое лучшее предположение состоит в том, что дочерний поток заканчивается раньше другого, и соединение MySQL неявно закрывается. Если это так, как я могу убедиться, что соединение остается открытым до тех пор, пока родительский поток не закроется?
1 ответ
После прочтения комментариев pcntl_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);