Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Cli/Command/JobRunnerTrait.php
<?php

namespace XF\Cli\Command;

use
Symfony\Component\Console\Output\OutputInterface;

use function
defined;

trait
JobRunnerTrait
{
    public function
setupAndRunJob($uniqueId, $jobClass, array $params = [], OutputInterface $output = null)
    {
        \
XF::app()->jobManager()->enqueueUnique($uniqueId, $jobClass, $params);

       
$this->runJob($uniqueId, $output);
    }

    public function
runJob($uniqueId, OutputInterface $output = null)
    {
       
$jobManager = \XF::app()->jobManager();
       
$em = \XF::em();

        if (
function_exists('pcntl_signal') && defined('SIGINT'))
        {
           
// Where possible, register a signal handler to run on interrupt to cancel the unique job
           
pcntl_signal(SIGINT, function() use($uniqueId)
            {
                \
XF::app()->jobManager()->cancelUniqueJob($uniqueId);
            });
        }

        while (
$runner = $jobManager->runUnique($uniqueId, \XF::config('jobMaxRunTime')))
        {
            if (
$output)
            {
               
$output->writeln($runner->statusMessage);
            }

           
// keep the memory limit down on long running jobs
           
$em->clearEntityCache();
            \
XF::updateTime();

            if (
function_exists('pcntl_signal_dispatch'))
            {
               
// Dispatch any registered signal handlers for pending signals
               
pcntl_signal_dispatch();
            }
        }
    }
}