复制代码 代码如下:
php defined('syspath') or die('no direct access allowed.');
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);
}
}
}
}
0
0
相关文章
生成630个1–20之间的随机数,使其总和严格不超过3000的PHP实现方案
如何在表单中根据 MySQL 布尔字段预选单选按钮
PHP 中读取 PHP 文件顶部注释元数据的最佳实践
如何在 WordPress Astra 主题页眉中动态显示带图标的特色图像标题
PHP 中合并多个学生成绩数组并去重(以 student_id 为唯一标识)
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。
63
2026.02.04
本专题详细汇总了学习通网页版入口与登录方法,提供学习通官方网页端入口、学生登录平台、网页版使用指南等内容,帮助用户快速稳定地登录学习通官网,顺利进入学习平台,提升学习效率和体验。
9
2026.02.04
本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。
9
2026.02.04
本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。
3
2026.02.04
本专题深入讲解 Golang 应用的容器化与 Docker 部署,涵盖 Docker 基础概念、容器构建与镜像管理、Go 应用的 Dockerfile 编写、跨平台容器部署与优化、Docker Compose 和 Kubernetes 部署工具。通过实际案例,帮助学习者掌握 如何将 Golang 应用容器化并实现高效部署与管理,提升系统的可扩展性与运维效率。
3
2026.02.04
热门下载
精品课程
最新文章





