PHP获取后台作业管理的实现代码。

PHP获取后台作业管理的实现代码。
复制代码代码如下所示:
< PHP定义('SYSPATH')或死亡(不允许直接访问。);
类controller_jobs延伸controller_base {
公共函数之前(){
家长::();
如果(请求:$)!=CLI){
模具(只有CLI允许!;
}
}
({){之后的公共函数
家长::();
做一些清理任务
}
私有函数_execjobcommand(joburi美元,用美元){
php_exec美元= Kohana::配置(picsou。php_exec );
php_index = appindex美元;
command_args美元=阵();
command_args { } = php_index美元美元;
command_args美元{ } = ——URI =joburi美元;
foreach(用美元美元美元对位=值){
command_args美元{ } = ,。为准。$;
}
/ / var_dump($ command_args);退出
回声EXEC命令:php_exec美元。;
pcntl_exec(php_exec美元,美元command_args);
}
*
*在队列中运行作业
* /
公共功能action_run(){
requestcount = 0美元;
当(真){
为SQL =SELECT * FROM job_queue地位= '1'and批准= 1订单ID;
$工作= DB(数据库查询::::选择$ SQL)->执行-> as_array()();
如果($工作){
foreach($美元的工作岗位){
requestcount美元+ +;
将工作状态更新为运行状态
DB::更新('job_queue)->设置(阵列('status= > 2))
->在('id',T,$工作{ 'id' })(->执行);
job_pid美元= pcntl_fork();
如果($ job_pid = = 1){
死亡(不能叉孩子);
} {如果(其他job_pid美元= 0)
美元-> _execjobcommand($工作{ 'job_uri},json_decode($工作{ 'paras},真的));
完成子;
出口(0);
在这里运行作业
别的{ }
等待作业;
ob_flush();
child_pid美元= pcntl_waitpid(job_pid美元,美元的地位,wuntraced);
回声waitpid结束:美元的地位。;
如果($ = 0){
完成了作业
DB::更新('job_queue)->设置(阵列('status= > '999 '))
->在('id',T,$工作{ 'id' })(->执行);
子完成;
ob_flush();
其他{ }
DB::更新('job_queue)->设置(阵列('status= >- 1))
->在('id',T,$工作{ 'id' })(->执行);
子失败;
ob_flush();
}
}
}
}
别的{
如果($ requestcount > = 10){
休息一下,我处理了10个工作;
出口;
}
没有运行的作业
没有作业;
ob_flush();
睡眠(5);
}
}
}
}
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部