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
一段php加密解密的代码
Oct 09 PHP
PHP实现MySQL更新记录的代码
Jun 07 PHP
PHP获取文件的MD5值并判断是否被修改的例子
Jun 19 PHP
php多任务程序实例解析
Jul 19 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
laravel orm 关联条件查询代码
Oct 21 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
解析zend Framework如何自动加载类
2013/06/28 PHP
php实现图片添加水印功能
2014/02/13 PHP
php表单敏感字符过滤类
2014/12/08 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
js选项卡的实现方法
2015/02/09 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
Python实现字符串格式化的方法小结
2017/02/20 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
信访工作经验交流材料
2014/05/23 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android