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
Oct 09 PHP
PHP脚本数据库功能详解(中)
Oct 09 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
Jun 06 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
laravel 5 实现模板主题功能(续)
Mar 02 PHP
PHP整合PayPal支付
Jun 11 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
PHP容器类的两种实现方式示例
Jul 24 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
Python实现提取文章摘要的方法
2015/04/21 Python
python文本数据相似度的度量
2018/03/12 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
办公室文书岗位职责
2013/12/16 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
班主任对学生的评语
2014/04/26 职场文书
爱国演讲稿400字
2014/05/07 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
python 逐步回归算法
2021/04/06 Python
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
MySQL RC事务隔离的实现
2022/03/31 MySQL
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers