• 技术文章 >后端开发 >php教程

    jyxiaozhi.taobao.com php获取后台Job管理的实现代码

    2016-07-29 08:45:36原创776

    复制代码 代码如下:


    class Controller_Jobs extends Controller_Base{
    public function before(){
    parent::before();
    if(Request::$protocol != "cli"){
    die("Only cli allowed!\n");
    }
    }
    public function after(){
    parent::after();
    //do some cleaning tasks
    }
    private function _execJobCommand($joburi,$paras){
    $php_exec = Kohana::config("picsou.php_exec");
    $php_index = APPINDEX;
    $command_args = array();
    $command_args[] = $php_index;
    $command_args[] = "--uri=".$joburi;
    foreach ($paras as $para => $value){
    $command_args[] = "--".$para."=".$value;
    }
    //var_dump($command_args);exit;
    echo "exec commmand:".$php_exec."\n";
    pcntl_exec($php_exec,$command_args);
    }
    /*
    * Running jobs in queues
    */
    public function action_run(){
    $requestCount = 0;
    while(true){
    $sql = "select * from job_queue where status='1' and approved='1' order by id";
    $jobs = DB::query(Database::SELECT,$sql)->execute()->as_array();
    if($jobs){
    foreach ($jobs as $job){
    $requestCount ++;
    //update the jobs status as running
    DB::update('job_queue')->set(array('status'=>'2'))
    ->where('id','=',$job['id'])->execute();
    $job_pid = pcntl_fork();
    if($job_pid == -1){
    die("Could not fork Child");
    } else if($job_pid == 0 ){
    $this->_execJobCommand($job['job_uri'],json_decode($job['paras'],true));
    echo "finish Child\n";
    exit(0);
    //run jobs here
    } else{
    echo "Waiting for job\n";
    ob_flush();
    $child_pid = pcntl_waitpid($job_pid,$status, WUNTRACED);
    echo "waitpid end:".$status."\n";
    if($status == 0){
    //job completed
    DB::update('job_queue')->set(array('status'=>'999'))
    ->where('id','=',$job['id'])->execute();
    echo "Child Finished\n";
    ob_flush();
    }else{
    DB::update('job_queue')->set(array('status'=>'-1'))
    ->where('id','=',$job['id'])->execute();
    echo "Child Failed\n";
    ob_flush();
    }
    }
    }
    }
    else{
    if($requestCount >=10){
    echo "Have a rest, I have processed 10 jobs\n";
    exit;
    }
    //no job to run
    //echo "No job\n";
    ob_flush();
    sleep(5);
    }
    }
    }
    }

    以上就介绍了jyxiaozhi.taobao.com php获取后台Job管理的实现代码,包括了jyxiaozhi.taobao.com方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:jyxiaozhi.taobao.com
    上一篇:define 提高define性能的php扩展hidef的安装和使用 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 设计API接口时,要注意这些地方!• PHP网站常见一些安全漏洞及防御方法• 一个PHP软件工程师应该掌握的10项技能 • php + oracel 有关问题 • PHP学习笔记--延迟静态绑定
    1/1

    PHP中文网