Cron

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

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
oEngine Engine Объект ядра Cron
oLockFile string Дескриптор блокирующего файла Cron
sProcessName string Имя процесса, под которым будут помечены все сообщения в логах Cron

Public Methods

Hide inherited methods

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

Property Details

oEngine property
protected Engine $oEngine;

Объект ядра

oLockFile property
protected string $oLockFile;

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

sProcessName property
protected string $sProcessName;

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

Method Details

Client() method
public void Client()
Source Code: /engine/classes/Cron.class.php#141 (show)
public function Client(){
    throw new 
Exception('Call undefined client function');
}

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

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

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

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

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

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

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

__call() method
public mixed __call(string $sName, array $aArgs)
$sName string Имя метода
$aArgs array Аргументы
{return} mixed
Source Code: /engine/classes/Cron.class.php#152 (show)
public function __call($sName,$aArgs) {
    return 
$this->oEngine->_CallModule($sName,$aArgs);
}

Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля

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

    if(!empty(
$sLockFile)) {
        
$this->oLockFile=fopen($sLockFile,'a');
    }
    
/**
     * Инициализируем лог и делает пометку о старте процесса
     */
    
$this->oEngine->Logger_SetFileName(Config::Get('sys.logs.cron_file'));
    
$this->Log('Cron process started');
}

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

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

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

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

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

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