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中存储过程、函数的一些问题
Feb 14 PHP
php 小乘法表实现代码
Jul 16 PHP
php实现建立多层级目录的方法
Jul 19 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
php访问数组最后一个元素的函数end()用法
Mar 18 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
ThinkPHP发送邮件示例代码
Oct 08 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php用wangeditor3实现图片上传功能
Aug 22 PHP
解决Laravel blade模板转义html标签的问题
Sep 03 PHP
PHP实现批量修改文件名的方法示例
Sep 18 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登陆页的密码处理方式分享
2013/10/14 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
python实现飞机大战小游戏
2019/11/08 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
python pygame实现球球大作战
2019/11/25 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
日语专业毕业生自荐信
2013/11/11 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
终止劳动合同协议书
2014/10/05 职场文书
家访教师心得体会
2016/01/23 职场文书
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python