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 相关文章推荐
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
PHP $_SERVER详解
Jan 16 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
Nov 21 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
php判断字符串在另一个字符串位置的方法
Feb 27 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
php实现复制移动文件的方法
Jul 29 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
Apr 26 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脚本
2006/11/26 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
javascript 简练的几个函数
2009/08/29 Javascript
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
深入源码解析Python中的对象与类型
2015/12/11 Python
Python循环语句中else的用法总结
2016/09/11 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
工作简报范文
2015/07/21 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
nginx配置虚拟主机的详细步骤
2021/07/21 Servers