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

namespace XF\Cli\Command;

use
Symfony\Component\Console\Command\Command;
use
Symfony\Component\Console\Input\InputInterface;
use
Symfony\Component\Console\Input\InputOption;
use
Symfony\Component\Console\Output\OutputInterface;

class
RunJobs extends Command
{
    protected function
configure()
    {
       
$this
           
->setName('xf:run-jobs')
            ->
setDescription('Runs any outstanding jobs.')
            ->
addOption(
               
'max-execution-time',
               
null,
               
InputOption::VALUE_OPTIONAL,
               
'Sets a max execution time in seconds. Use 0 to run until all jobs have completed.',
               
55
           
)
            ->
addOption(
               
'wait',
               
null,
               
InputOption::VALUE_NONE,
               
'Waits for more jobs until the max execution time has been reached. This option has no effect if the max execution time is 0.'
           
)
            ->
addOption(
               
'manual-only',
               
null,
               
InputOption::VALUE_NONE,
               
'Ensures that only manually triggered jobs are run'
           
);
    }

    protected function
execute(InputInterface $input, OutputInterface $output)
    {
       
$app = \XF::app();
       
$jobManager = $app->jobManager();

        if (!
$jobManager->canRunJobs())
        {
           
$output->writeln('<error>Jobs cannot be run at this time.</error>');
            return
1;
        }

       
$maxRunTime = $app->config('jobMaxRunTime');
       
$manualOnly = $input->getOption('manual-only');

       
$maxExecutionTime = $input->getOption('max-execution-time');
       
$wait = $input->getOption('wait');

       
$start = microtime(true);

        do
        {
           
$jobManager->runQueue($manualOnly, $maxRunTime);

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

           
$more = $jobManager->queuePending($manualOnly);
            if (!
$more)
            {
                if (
$maxExecutionTime && $wait)
                {
                   
sleep(1);
                }
                else
                {
                    break;
                }
            }
        }
        while (!
$maxExecutionTime || microtime(true) - $start < $maxExecutionTime);

       
$output->writeln('<info>All outstanding jobs have run.</info>');

        return
0;
    }
}