Codeigniter Cron作业消耗更多时间然后插入数据库

时间:2017-01-04 13:53:35

标签: php codeigniter cron

我有一个cron job,可以拨打以下codeigniter controller 时间昂贵
其中计算和操作更多操作(平均需要5分钟)
然后在数据库

上插入值
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Mycron extends CI_Controller {

    public function cron_function()
    {
        // simulate time cost operations
        sleep(300); // 5 mint = 5 *60 = 300 sec

        $this->load->database();    // line1
        $this->db->reconnect();     // line2

        $this           -> db -> set    ( 'source_id',  '11');
        $this           -> db -> set    ( 'title',  'TTL');
        $query = $this  -> db -> insert ( 'my_table' );

        echo 'END ...'; 
    }
}

我的问题
没有两行line1 / line2
当数据库尝试连接消耗的操作时间后,结果将是

SQL Error: 2006: MySQL server has gone away

然后尝试使用2行将修复RE_CONNECT应用于数据库时 我们面对

A PHP Error was encountered
Severity: Warning
Message: Cannot modify header information - headers already sent by 
(output started at .../system/database/drivers/mysqli/mysqli_driver.php:392)
Filename: core/Common.php
Line Number: 568
Backtrace:

A PHP Error was encountered
Severity: Error
Message: Call to a member function real_escape_string() on boolean
Filename: mysqli/mysqli_driver.php
Line Number: 392
Backtrace:

2 个答案:

答案 0 :(得分:0)

我建议在cron控制器中创建第二个方法,只负责将数据插入数据库。

然后,在完成时间成本高昂的操作后,您可以将生成的数据发送到第二种方法,例如curl,从而绕过MySQL超时限制。

答案 1 :(得分:0)

我已禁用database库的自动加载 旧代码

$autoload['libraries'] = array('database');

$autoload['libraries'] = array();

在调用DB语句

之前手动加载它
$this->load->database();

因此,在昂贵的操作时间结束后,数据库连接将会打开

然后这次(昂贵的操作)将不被视为数据库同步操作时间
与自动加载database库相反,该库在加载页面时启动计时器