Cron

Package framework.engine
Inheritance abstract class Cron » LsObject
Since 1.0
Source Code /framework/classes/engine/Cron.class.php
Абстрактный класс для работы с крон-процессами. Например, его использует отложенная рассылка почтовых уведомлений для пользователей. Обработчик крона не запускается автоматически(!!), его необходимо добавлять в системный крон (nix*: crontab -e)

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
aBehaviors array Список поведений LsObject
bLogEnable bool Производить логирование или нет Cron
oLockFile string Дескриптор блокирующего файла Cron
sProcessName string Имя процесса, под которым будут помечены все сообщения в логах Cron

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AttachBehavior() Присоединяет поведение к объекту LsObject
Client() Клиентская функция будет переопределятся в наследниках класса Cron
DetachBehavior() Отсоединяет поведение от объекта LsObject
Exec() Основной метод крон-процесса. Cron
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
Log() Делает запись в лог Cron
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
Shutdown() Завершение крон-процесса Cron
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля LsObject
__clone() При клонировании сбрасываем поведения LsObject
__construct() Cron
__destruct() Вызывается при уничтожении объекта Cron
__get() Обработка доступа к объекты поведения LsObject
isLock() Проверяет уникальность создаваемого процесса Cron
unsetLock() Снимает блокировку на повторный процесс Cron

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
PrepareBehaviors() Инициализация поведений LsObject

Property Details

bLogEnable property
protected bool $bLogEnable;

Производить логирование или нет

oLockFile property
protected string $oLockFile;

Дескриптор блокирующего файла Если этот файл существует, то крон не запустится повторно.

sProcessName property
protected string $sProcessName;

Имя процесса, под которым будут помечены все сообщения в логах

Method Details

Client() method
abstract public void Client()
Source Code: /framework/classes/engine/Cron.class.php#159 (show)
abstract public function Client();

Клиентская функция будет переопределятся в наследниках класса для обеспечивания выполнения основного функционала.

Exec() method
public string Exec()
{return} string
Source Code: /framework/classes/engine/Cron.class.php#113 (show)
public function Exec()
{
    
/**
     * Если выполнение процесса заблокирован, завершаемся
     */
    
if ($this->isLock()) {
        
$this->Log('Try to exec already run process');
        return;
    }
    
/**
     * Здесь мы реализуем дополнительную логику:
     * логирование вызова, обработка ошибок,
     * буферизация вывода.
     */
    
ob_start();
    
$this->Client();
    
/**
     * Получаем весь вывод функции.
     */
    
$sContent ob_get_contents();
    
ob_end_clean();

    return 
$sContent;
}

Основной метод крон-процесса. Реализует логику работы крон процесса с последующей передачей управления на пользовательскую функцию

Log() method
public void Log(string $sMsg)
$sMsg string Сообщение для записи в лог
Source Code: /framework/classes/engine/Cron.class.php#79 (show)
public function Log($sMsg)
{
    if (
$this->bLogEnable and Config::Get('sys.logs.cron')) {
        
$sMsg $this->sProcessName ': ' $sMsg;
        
$this->Logger_Notice($sMsg, array(), 'cron');
    }
}

Делает запись в лог

Shutdown() method
public void Shutdown()
Source Code: /framework/classes/engine/Cron.class.php#141 (show)
public function Shutdown()
{
    
$this->unsetLock();
    
$this->Log('Cron process ended');
}

Завершение крон-процесса

__construct() method
public void __construct(string|null $sLockFile=NULL)
$sLockFile string|null Полный путь до лок файла, например
Config::Get('sys.cache.dir').'notify.lock'
Source Code: /framework/classes/engine/Cron.class.php#55 (show)
public function __construct($sLockFile null)
{
    
parent::__construct();
    
$this->sProcessName get_class($this);
    
$oEngine Engine::getInstance();
    
/**
     * Инициализируем ядро
     */
    
$oEngine->Init();

    if (!empty(
$sLockFile)) {
        
$this->oLockFile fopen($sLockFile'a');
    }
    
/**
     * Инициализируем лог и делает пометку о старте процесса
     */
    
$this->Log('Cron process started');
}

__destruct() method
public void __destruct()
Source Code: /framework/classes/engine/Cron.class.php#150 (show)
public function __destruct()
{
    
$this->Shutdown();
}

Вызывается при уничтожении объекта

isLock() method
public bool isLock()
{return} bool
Source Code: /framework/classes/engine/Cron.class.php#92 (show)
public function isLock()
{
    return (
$this->oLockFile && !flock($this->oLockFileLOCK_EX LOCK_NB));
}

Проверяет уникальность создаваемого процесса

unsetLock() method
public bool unsetLock()
{return} bool
Source Code: /framework/classes/engine/Cron.class.php#102 (show)
public function unsetLock()
{
    return (
$this->oLockFile && @flock($this->oLockFileLOCK_UN));
}

Снимает блокировку на повторный процесс