mirror of
https://github.com/LBRYFoundation/pool.git
synced 2025-08-23 17:37:25 +00:00
cron: create a class to handle console threads
for now, only migrate loop2.sh screen task... todo: blocks.sh and main.sh after more tests
This commit is contained in:
parent
f47ec6dd60
commit
5f95cc1d7c
3 changed files with 221 additions and 2 deletions
|
@ -1,10 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
alias php5='php -d max_execution_time=120'
|
PHP_CLI='php -d max_execution_time=120'
|
||||||
|
|
||||||
|
date
|
||||||
|
|
||||||
cd /var/web
|
cd /var/web
|
||||||
while true; do
|
while true; do
|
||||||
php5 run.php cronjob/runLoop2
|
${PHP_CLI} runconsole.php cronjob/runLoop2
|
||||||
sleep 60
|
sleep 60
|
||||||
done
|
done
|
||||||
exec bash
|
exec bash
|
||||||
|
|
29
web/runconsole.php
Executable file
29
web/runconsole.php
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if(php_sapi_name() != "cli") return;
|
||||||
|
|
||||||
|
require_once('serverconfig.php');
|
||||||
|
require_once('yaamp/defaultconfig.php');
|
||||||
|
|
||||||
|
require_once('framework/yii.php');
|
||||||
|
require_once('yaamp/include.php');
|
||||||
|
|
||||||
|
require_once('yaamp/components/CYiimpConsoleApp.php');
|
||||||
|
|
||||||
|
$config = require_once('yaamp/console.php');
|
||||||
|
$app = Yii::createApplication('CYiimpConsoleApp', $config);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$app->runController($argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
catch(CException $e)
|
||||||
|
{
|
||||||
|
debuglog($e, 5);
|
||||||
|
|
||||||
|
$message = $e->getMessage();
|
||||||
|
echo "exception: $message\n";
|
||||||
|
// send_email_alert('backend', "backend error", "$message");
|
||||||
|
}
|
||||||
|
|
188
web/yaamp/components/CYiimpConsoleApp.php
Normal file
188
web/yaamp/components/CYiimpConsoleApp.php
Normal file
|
@ -0,0 +1,188 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* CYiimpConsoleApp class file.
|
||||||
|
*
|
||||||
|
* Meant to replace run.php threads in a console/screen environment
|
||||||
|
* allow to use common user()->getState/setState() and memcache
|
||||||
|
*
|
||||||
|
* php runconsole.php cronjob/runLoop2
|
||||||
|
* will execute actionRunLoop2() from <modules/thread/>CronjobController.php
|
||||||
|
*
|
||||||
|
* @author Tanguy Pruvot
|
||||||
|
* @copyright 2017 YiiMP
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CYiimpConsoleApp extends CConsoleApplication
|
||||||
|
{
|
||||||
|
private $_controllerPath;
|
||||||
|
private $_controller;
|
||||||
|
|
||||||
|
public $defaultController = 'cronjob';
|
||||||
|
|
||||||
|
public $layoutPath;
|
||||||
|
public $layout;
|
||||||
|
public $viewPath;
|
||||||
|
public $systemViewPath;
|
||||||
|
|
||||||
|
public $controllerMap=array();
|
||||||
|
public $controllerNamespace;
|
||||||
|
|
||||||
|
public $user;
|
||||||
|
public $memcache;
|
||||||
|
|
||||||
|
protected function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
$this->_controllerPath = $this->getBasePath().DIRECTORY_SEPARATOR.'modules/thread';
|
||||||
|
|
||||||
|
$this->user = new CWebUser; // for user()->getState()
|
||||||
|
$this->memcache = new YaampMemcache;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function registerCoreComponents()
|
||||||
|
{
|
||||||
|
parent::registerCoreComponents();
|
||||||
|
$components = $this->getComponents();
|
||||||
|
$components['user'] = array(
|
||||||
|
'class'=>'CWebUser',
|
||||||
|
);
|
||||||
|
$this->setComponents($components);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createController($route,$owner=null)
|
||||||
|
{
|
||||||
|
if($owner===null)
|
||||||
|
$owner=$this;
|
||||||
|
if((array)$route===$route || ($route=trim($route,'/'))==='')
|
||||||
|
$route=$owner->defaultController;
|
||||||
|
$caseSensitive=$this->getUrlManager()->caseSensitive;
|
||||||
|
|
||||||
|
$route.='/';
|
||||||
|
while(($pos=strpos($route,'/'))!==false)
|
||||||
|
{
|
||||||
|
$id=substr($route,0,$pos);
|
||||||
|
if(!preg_match('/^\w+$/',$id))
|
||||||
|
return null;
|
||||||
|
if(!$caseSensitive)
|
||||||
|
$id=strtolower($id);
|
||||||
|
$route=(string)substr($route,$pos+1);
|
||||||
|
if(!isset($basePath)) // first segment
|
||||||
|
{
|
||||||
|
if(isset($owner->controllerMap[$id]))
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
Yii::createComponent($owner->controllerMap[$id],$id,$owner===$this?null:$owner),
|
||||||
|
$this->parseActionParams($route),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(($module=$owner->getModule($id))!==null)
|
||||||
|
return $this->createController($route,$module);
|
||||||
|
|
||||||
|
$basePath=$owner->getControllerPath();
|
||||||
|
$controllerID='';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$controllerID.='/';
|
||||||
|
$className=ucfirst($id).'Controller';
|
||||||
|
$classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php';
|
||||||
|
|
||||||
|
if($owner->controllerNamespace!==null)
|
||||||
|
$className=$owner->controllerNamespace.'\\'.str_replace('/','\\',$controllerID).$className;
|
||||||
|
|
||||||
|
if(is_file($classFile))
|
||||||
|
{
|
||||||
|
if(!class_exists($className,false))
|
||||||
|
require($classFile);
|
||||||
|
if(class_exists($className,false) && is_subclass_of($className,'CController'))
|
||||||
|
{
|
||||||
|
$id[0]=strtolower($id[0]);
|
||||||
|
return array(
|
||||||
|
new $className($controllerID.$id,$owner===$this?null:$owner),
|
||||||
|
$this->parseActionParams($route),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$controllerID.=$id;
|
||||||
|
$basePath.=DIRECTORY_SEPARATOR.$id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the controller and performs the specified action.
|
||||||
|
* @param string $route the route of the current request. See {@link createController} for more details.
|
||||||
|
* @throws CException if the controller could not be created.
|
||||||
|
*/
|
||||||
|
public function runController($route)
|
||||||
|
{
|
||||||
|
if(($ca=$this->createController($route))!==null)
|
||||||
|
{
|
||||||
|
list($controller,$actionID)=$ca;
|
||||||
|
$oldController=$this->_controller;
|
||||||
|
$this->_controller=$controller;
|
||||||
|
$controller->init();
|
||||||
|
$controller->run($actionID);
|
||||||
|
$this->_controller=$oldController;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new CException(Yii::t('yii', 'Unable to resolve the request "{route}". (CYiimpConsoleApp)',
|
||||||
|
array('{route}'=>$route===''?$this->defaultController:$route)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses a path info into an action ID and GET variables.
|
||||||
|
* @param string $pathInfo path info
|
||||||
|
* @return string action ID
|
||||||
|
*/
|
||||||
|
protected function parseActionParams($pathInfo)
|
||||||
|
{
|
||||||
|
if(($pos=strpos($pathInfo,'/'))!==false)
|
||||||
|
{
|
||||||
|
$manager=$this->getUrlManager();
|
||||||
|
$manager->parsePathInfo((string)substr($pathInfo,$pos+1));
|
||||||
|
$actionID=substr($pathInfo,0,$pos);
|
||||||
|
return $manager->caseSensitive ? $actionID : strtolower($actionID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return $pathInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function beforeControllerAction($controller,$action)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function afterControllerAction($controller,$action)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string the directory that contains the controller classes. Defaults to 'protected/controllers'.
|
||||||
|
*/
|
||||||
|
public function getControllerPath()
|
||||||
|
{
|
||||||
|
if($this->_controllerPath!==null)
|
||||||
|
return $this->_controllerPath;
|
||||||
|
else
|
||||||
|
return $this->_controllerPath=$this->getBasePath().DIRECTORY_SEPARATOR.'controllers';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $value the directory that contains the controller classes.
|
||||||
|
* @throws CException if the directory is invalid
|
||||||
|
*/
|
||||||
|
public function setControllerPath($value)
|
||||||
|
{
|
||||||
|
if(($this->_controllerPath=realpath($value))===false || !is_dir($this->_controllerPath))
|
||||||
|
throw new CException(Yii::t('yii','The controller path "{path}" is not a valid directory.',
|
||||||
|
array('{path}'=>$value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue