Skip to content

Commit 0eb4cdd

Browse files
committed
feat(bg-jobs): support multiple arguments in cron.php and occ:background-job:worker for the job class list
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
1 parent d967151 commit 0eb4cdd

File tree

2 files changed

+13
-33
lines changed

2 files changed

+13
-33
lines changed

core/Command/Background/JobWorker.php

+7-21
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ protected function configure(): void {
5353
->setDescription('Run a background job worker')
5454
->addArgument(
5555
'job-classes',
56-
InputArgument::OPTIONAL,
57-
'The classes of the jobs to look for in the database, comma-separated'
56+
InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
57+
'The classes of the jobs to look for in the database'
5858
)
5959
->addOption(
6060
'once',
@@ -73,25 +73,11 @@ protected function configure(): void {
7373
}
7474

7575
protected function execute(InputInterface $input, OutputInterface $output): int {
76-
$jobClassesString = $input->getArgument('job-classes');
77-
// only keep non-empty strings
78-
$jobClasses = $jobClassesString === null
79-
? null
80-
: array_filter(
81-
explode(',', $jobClassesString),
82-
static function (string $jobClass) {
83-
return strlen($jobClass) > 0;
84-
}
85-
);
76+
$jobClasses = $input->getArgument('job-classes');
77+
$jobClasses = empty($jobClasses) ? null : $jobClasses;
8678

8779
if ($jobClasses !== null) {
88-
// no class
89-
if (count($jobClasses) === 0) {
90-
$output->writeln('<error>Invalid job class list supplied</error>');
91-
return 1;
92-
}
93-
94-
// at least one invalid class
80+
// at least one class is invalid
9581
foreach ($jobClasses as $jobClass) {
9682
if (!class_exists($jobClass)) {
9783
$output->writeln('<error>Invalid job class: ' . $jobClass . '</error>');
@@ -115,10 +101,10 @@ static function (string $jobClass) {
115101
$job = $this->jobList->getNext(false, $jobClasses);
116102
if (!$job) {
117103
if ($input->getOption('once') === true) {
118-
if ($jobClassesString === null) {
104+
if ($jobClasses === null) {
119105
$output->writeln('No job is currently queued', OutputInterface::VERBOSITY_VERBOSE);
120106
} else {
121-
$output->writeln('No job of classes ' . $jobClassesString . ' is currently queued', OutputInterface::VERBOSITY_VERBOSE);
107+
$output->writeln('No job of classes [' . implode(', ', $jobClasses) . '] is currently queued', OutputInterface::VERBOSITY_VERBOSE);
122108
}
123109
$output->writeln('Exiting...', OutputInterface::VERBOSITY_VERBOSE);
124110
break;

cron.php

+6-12
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@
6262
Run the background job routine
6363
6464
Usage:
65-
php -f cron.php -- [-h] [<job-classes>]
65+
php -f cron.php -- [-h] [<job-classes>...]
6666
6767
Arguments:
68-
job-classes Optional job class comma-separated list to only run those jobs
68+
job-classes Optional job class list to only run those jobs
6969
7070
Options:
7171
-h, --help Display this help message' . PHP_EOL;
@@ -175,16 +175,10 @@
175175
$endTime = time() + 14 * 60;
176176

177177
$executedJobs = [];
178-
// a specific job class list can optionally be given as first argument
179-
// only keep non-empty strings
180-
$jobClasses = isset($argv[1])
181-
? array_filter(
182-
explode(',', $argv[1]),
183-
static function (string $jobClass) {
184-
return strlen($jobClass) > 0;
185-
}
186-
)
187-
: null;
178+
// a specific job class list can optionally be given as argument
179+
$jobClasses = array_slice($argv, 1);
180+
$jobClasses = empty($jobClasses) ? null : $jobClasses;
181+
188182
while ($job = $jobList->getNext($onlyTimeSensitive, $jobClasses)) {
189183
if (isset($executedJobs[$job->getId()])) {
190184
$jobList->unlockJob($job);

0 commit comments

Comments
 (0)