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 相关文章推荐
PHP 递归效率分析
Nov 24 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
JSON在PHP中的应用介绍
Sep 08 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
PHP错误和异长常处理总结
Mar 06 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
提高php编程效率技巧
Aug 13 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
php用户登录之cookie信息安全分析
May 13 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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 XML操作的各种方法解析(比较详细)
2010/06/17 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
javascript实现动态标签云
2015/10/16 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python集合能干吗
2020/07/19 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
企业安全生产责任书
2014/04/14 职场文书
音乐幼师求职信
2014/07/09 职场文书
公司年底活动方案
2014/08/17 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
钢琴师观后感
2015/06/12 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
Redis命令处理过程源码解析
2022/02/12 Redis