服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - php获取后台Job管理的实现代码

php获取后台Job管理的实现代码

2019-11-28 14:04PHP教程网 PHP教程

从数据库中取出job 队列 创建新的进程进行执行 等待job 结束

代码如下:


<?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实现的解汉诺塔问题算法示例

    PHP实现的解汉诺塔问题算法示例

    这篇文章主要介绍了PHP实现的解汉诺塔问题算法,简单描述了汉诺塔问题及相应的实现算法,并结合实例形式给出了PHP具体操作技巧,需要的朋友可以参考下...

    qw_xingzhe4822019-09-16
  • PHP教程php Notice: Undefined index 错误提示解决方法

    php Notice: Undefined index 错误提示解决方法

    字面意思就是未定义的索引,一般情况下是因为程序开发作者判断不严谨导致。一般不会影响程序的运行,具体的解决方法可以参考下。 ...

    php教程网4042019-11-07
  • PHP教程PHP数组递归排序实现方法示例

    PHP数组递归排序实现方法示例

    这篇文章主要介绍了PHP数组递归排序实现方法,结合实例形式分析了php基于递归算法针对特定key对数组进行排序的相关操作技巧,需要的朋友可以参考下 ...

    alexander_phper4522019-10-16
  • PHP教程Laravel5.5以下版本中如何自定义日志行为详解

    Laravel5.5以下版本中如何自定义日志行为详解

    这篇文章主要给大家介绍了关于Laravel5.5以下版本中如何自定义日志行为的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的...

    麦索2502019-09-17
  • PHP教程joomla内置的表单验证功能使用方法

    joomla内置的表单验证功能使用方法

    Joomla有自己的表单验证功能,可以很方便地实现验证,没有通过验证的输入框在提交报错后会用红色边框表示,很清楚地知道漏了那几项没填。 ...

    php教程网1662019-11-01
  • PHP教程深入研究PHP中的preg_replace和代码执行

    深入研究PHP中的preg_replace和代码执行

    这篇文章主要给大家介绍了关于PHP中preg_replace和代码执行的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    红日安全4322019-09-12
  • PHP教程PHP实现简易计算器功能

    PHP实现简易计算器功能

    这篇文章主要为大家详细介绍了PHP实现简易计算器功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Roninwz1742019-07-26
  • PHP教程Yii2使用表单上传文件的实例代码

    Yii2使用表单上传文件的实例代码

    本篇文章主要介绍了Yii2使用表单上传文件的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    webclz1742019-08-30