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 PDO函数库详解
Apr 27 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
Jun 19 PHP
php中的常用魔术方法总结
Aug 02 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
PHP处理Json字符串解码返回NULL的解决方法
Sep 01 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 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+java实现自动新闻滚动窗口
2006/10/09 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
Python字符串格式化输出方法分析
2016/04/13 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
买房子个人收入证明
2014/01/16 职场文书
元旦晚会邀请函
2014/02/01 职场文书
网站创业计划书
2014/04/30 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
本溪水洞导游词
2015/02/11 职场文书
闪闪红星观后感
2015/06/08 职场文书
党员发展大会主持词
2015/07/03 职场文书
《认识钟表》教学反思
2016/02/16 职场文书