php获取后台Job管理的实现代码


Posted in PHP onJune 10, 2011
<?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); 
} 
} 
} 
}
PHP 相关文章推荐
基于mysql的bbs设计(二)
Oct 09 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
php的闭包(Closure)匿名函数详解
Feb 22 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
使用YII2框架实现微信公众号中表单提交功能
Sep 04 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
CI框架简单分页类用法示例
Jun 06 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 #PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 #PHP
PHP网站备份程序代码分享
Jun 10 #PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 #PHP
PHP中遍历stdclass object的实现代码
Jun 09 #PHP
IIS7.X配置PHP运行环境小结
Jun 09 #PHP
php基础学习之变量的使用
Jun 09 #PHP
You might like
php反射应用示例
2014/02/25 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
jquery.lazyload  实现图片延迟加载jquery插件
2010/02/06 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
用Python实现KNN分类算法
2017/12/22 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
Python实现ATM系统
2020/02/17 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
Python如何获取文件路径/目录
2020/09/22 Python
python处理写入数据代码讲解
2020/10/22 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
办公室前台的岗位职责
2013/12/20 职场文书
计算机网络专业求职信
2014/06/05 职场文书
高中生学习计划书
2014/09/15 职场文书
团组织关系介绍信
2019/06/24 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技
关于vue-router-link选择样式设置
2022/04/30 Vue.js