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设计模式 注册表模式
Feb 05 PHP
php旋转图片90度的方法
Nov 07 PHP
php使用反射插入对象示例分享
Mar 11 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
Yii学习总结之数据访问对象 (DAO)
Feb 22 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
PHP异常处理Exception类
Dec 11 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
Laravel5.7 数据库操作迁移的实现方法
Apr 12 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 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
substr()函数中文版
2006/10/09 PHP
PHP中Session的概念
2006/10/09 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP7 windows支持
2021/03/09 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
2013/06/26 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
js实现登录与注册界面
2017/11/01 Javascript
详解react-redux插件入门
2018/04/19 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
Python中的startswith和endswith函数使用实例
2014/08/25 Python
python查询mysql中文乱码问题
2014/11/09 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
详解Python循环作用域与闭包
2019/03/21 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
请解释在new与override的区别
2012/10/29 面试题
数控专业毕业生求职信范文
2013/09/21 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
前处理班长职位说明书
2014/03/01 职场文书
房产分割协议书范文
2014/11/21 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
离婚案件上诉状
2015/05/23 职场文书
python 模块重载的五种方法
2021/04/24 Python
Python编程源码报错解决方法总结经验分享
2021/10/05 Python