联系官方销售客服

1835022288

028-61286886

开发框架 版主:迅睿框架研发组
任务队列怎么使用
类型:迅睿CMS 更新时间:2020-08-17 17:14:47 自动任务 任务队列

任务队列怎么使用

自定义函数是

function my_cron_dingshi($params) {   
    $data = array(
     'uid' => $params['code1'],
     'title' => $params['code2'],
     'inputtime' => SYS_TIME
    );
    $rt = \Phpcmf\Service::M()->db->table('1_form_test')->insert($data);
    if($rt){
  return dr_return_data(1, 'ok');
 }else{
  return dr_return_data(0, '失败原因'); 
 }    
}

定义了一个控制器

public function test() {
 // 写你的程序代码
 $rt = \Phpcmf\Service::M('cron')->add_cron(SITE_ID, "dingshi", [
  'code1' => '参数1',
  'code2' => '参数2',
  'code3' => '参数3',
 ]);
 print_r($rt);
}

手动访问控制器的结果

Array ( [code] => 118 [msg] => [data] => Array ( ) )


后台中任务队列中没有看到添加的任务,但是发现表中插入了数据

回帖
  • 平平
    #1楼    平平
    2020-08-17 15:56:25
    Chrome 0
    执行成功的任务会删除记录的,所以你看不到记录
  • 卧龙隐者
    #2楼    卧龙隐者
    2020-08-17 15:59:09
    Chrome 0
    那怎么加入队列文档上应该就是说添加add_cron的那个函数平平
  • 如来
    #3楼    如来
    2020-08-17 16:04:40
    Chrome 0
    发现表中插入了数据,说明这个任务已经执行成功啦,说明你成功了
  • 卧龙隐者
    #4楼    卧龙隐者
    2020-08-17 16:09:03
    Chrome 0
    我可能没说清楚,是1_form_test表插入数据但应该是先把任务插入到任务队列,然后到点再执行任务吧我这里是都没插入到任务队列,任务就直接执行了如来
  • 易学习
    #5楼    易学习
    2020-08-17 16:39:59
    Chrome 0

    1_form_test表插入数据说明你任务已经成功了

    流程是:

    先把任务插入到任务队列

    分支1:然后系统就自动执行任务,执行完毕,入库formtest表记录,删除任务队列记录

    分支2:如果没有设置自动任务代码,就会先入库到任务对列表,然后手动去点执行,点了执行成功,删除本条任务记录


  • 胡金海
    #6楼    胡金海
    2020-08-17 16:43:13
    Chrome 0
    作者之前推荐使用cron.php
  • 卧龙隐者
    #7楼    卧龙隐者
    2020-08-17 16:43:44
    Chrome 0

    我现在的问题是怎么插入到任务队列

    看文档是写那个add_cron的函数就行了

    但是我执行那个函数就直接入库formtest表了


    易学习

  • 卧龙隐者
    #8楼    卧龙隐者
    2020-08-17 16:44:44
    Chrome 0
    怎么用呢胡金海
  • 疾风
    #9楼    疾风
    2020-08-17 16:45:19
    Chrome 0
    Array ( [code] => 118
    这个id 118就是任务队列的记录id号,应该你已经执行成功了,系统就删除了118的记录,你就看不到,学习哥分析的好
  • 易学习
    #10楼    易学习
    2020-08-17 16:47:12
    Chrome 0
    function my_cron_dingshi($params) {   
        $data = array(
         'uid' => $params['code1'],
         'title' => $params['code2'],
         'inputtime' => SYS_TIME
        );
        $rt = \Phpcmf\Service::M()->db->table('1_form_test')->insert($data);
        if($rt){
      return dr_return_data(0, '数据插入成功了,我只看看是否在任务队列里面');
     }else{
      return dr_return_data(0, '失败原因'); 
     }    
    }
    你把参数改成0,故意让他失败,你就可以在任务队列里面看到了,因为你都执行成功了,cms会自动删除记录的
  • 卧龙隐者
    #11楼    卧龙隐者
    2020-08-17 16:53:50
    Chrome 0
    现在是执行这个函数
    public function test() {
     // 写你的程序代码
     $rt = \Phpcmf\Service::M('cron')->add_cron(SITE_ID, "dingshi", [
      'code1' => '参数1',
      'code2' => '参数2',
      'code3' => '参数3',
     ]);
     print_r($rt);
    }
    就直接执行了这个函数
    function my_cron_dingshi($params) {   
        $data = array(
         'uid' => $params['code1'],
         'title' => $params['code2'],
         'inputtime' => SYS_TIME
        );
        $rt = \Phpcmf\Service::M()->db->table('1_form_test')->insert($data);
        if($rt){
      return dr_return_data(1, 'ok');
     }else{
      return dr_return_data(0, '失败原因'); 
     }    
    }
    按您的参数改成0,确实看到在队列里了。但是这样我直接执行my_cron_dingshi就行了啊任务队列不就是为了先准备几个任务,然后到时间访问/index.php?s=api&c=run作为定时任务吗易学习
  • 易学习
    #12楼    易学习
    2020-08-17 17:02:24
    Chrome 0
    那可能是创始人技术大神的程序有bug,我发邮件问问创始人大哥
  • 卧龙隐者
    #13楼    卧龙隐者
    2020-08-17 17:07:10
    Chrome 0
    好的谢谢那请问一下,定时任务,您们都是怎么处理的?易学习
  • 易学习
    #14楼    易学习
    2020-08-17 17:09:51
    Chrome 0
    我习惯用的这个方法参考文档:《自定义任务Cron.php》定时我都写进bt面板里面
    满意答案
  • 卧龙隐者
    #15楼    卧龙隐者
    2020-08-17 17:14:47
    Chrome 0
    @易学习:好的,我研究研究这个