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 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
我常用的几个类
Oct 09 PHP
提升PHP执行速度全攻略(下)
Oct 09 PHP
PHP备份/还原MySQL数据库的代码
Jan 06 PHP
解析用PHP实现var_export的详细介绍
Jun 20 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
zend framework中使用memcache的方法
Mar 04 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
Laravel中间件实现原理详解
Oct 09 PHP
PHP实现的贪婪算法实例
Oct 17 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 8小时时间差的解决方法小结
2009/12/22 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
php简单分页类实现方法
2015/02/26 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python实现豆瓣图片下载的方法
2015/05/25 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
python单例模式实例解析
2018/08/28 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
Python PIL库图片灰化处理
2020/04/07 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
俄罗斯游戏商店:Buka
2020/03/01 全球购物
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
预防传染病方案
2014/06/14 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫