webcron/src/Command/RunCommand.php

61 lines
2.2 KiB
PHP
Raw Normal View History

2021-05-24 18:36:16 +02:00
<?php
namespace JeroenED\Webcron\Command;
2021-07-15 12:41:34 +02:00
use JeroenED\Framework\Kernel;
use JeroenED\Framework\Repository;
use JeroenED\Webcron\Repository\Job;
use JeroenED\Webcron\Repository\Run;
2021-05-24 18:36:16 +02:00
use Symfony\Component\Console\Command\Command;
2021-07-15 12:41:34 +02:00
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
2021-05-24 18:36:16 +02:00
class RunCommand extends Command
{
protected static $defaultName = 'run';
2021-07-15 12:41:34 +02:00
protected $kernel;
2021-05-24 18:36:16 +02:00
2021-07-15 12:41:34 +02:00
public function __construct(Kernel $kernel)
2021-05-24 18:36:16 +02:00
{
2021-07-15 12:41:34 +02:00
$this->kernel = $kernel;
parent::__construct();
}
2021-05-24 18:36:16 +02:00
2021-07-15 12:41:34 +02:00
protected function configure()
{
$this
->setDescription('Run a single cronjob')
->setHelp('This command runs a single command')
->addArgument('jobid', InputArgument::REQUIRED, 'The id of the job to be run');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$jobRepo = new Job($this->kernel->getDbCon());
$jobId = (int)$input->getArgument('jobid');
$jobRepo->setJobRunning($jobId, true);
$jobRepo->setTempVar($jobId, 'consolerun', true);
2021-07-15 12:41:34 +02:00
$result = $jobRepo->runNow($jobId, true);
$job = $jobRepo->getJob($jobId);
if($job['data']['crontype'] == 'reboot') {
$sleeping = true;
while($sleeping) {
$job = $jobRepo->getJob($jobId);
if(time() >= $job['running']) $sleeping = false;
sleep(1);
}
$result = $jobRepo->runNow($jobId, true);
}
2021-07-15 12:41:34 +02:00
$jobRepo->setJobRunning($jobId, false);
$jobRepo->setTempVar($jobId, 'consolerun', false);
2021-07-15 12:41:34 +02:00
$output->write($result['output']);
if($result['success']) {
$output->writeln('Job succeeded with in ' . number_format($result['runtime'], 3) . 'secs exitcode ' . $result['exitcode']);
return Command::SUCCESS;
} else {
$output->writeln('Job failed in ' . number_format($result['runtime'], 3) . 'secs with exitcode ' . $result['exitcode']);
return Command::FAILURE;
}
2021-05-24 18:36:16 +02:00
}
}