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 相关文章推荐
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
PHP中判断变量为空的几种方法分享
Aug 26 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
yii框架数据库关联查询操作示例
Oct 14 PHP
Laravel如何实现自动加载类
Oct 14 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使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
JavaScript 常用函数
2009/12/30 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
js实现圆盘记速表
2015/08/03 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
python字符串中的单双引
2017/02/16 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
python读取Excel实例详解
2018/08/17 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
Python函数生成器原理及使用详解
2020/03/12 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
地理教师岗位职责
2014/03/16 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
Python机器学习之逻辑回归
2021/05/11 Python