fichtme/symfony-command-runner

Run multiple commands async

4.0.1 2024-06-14 08:33 UTC

This package is auto-updated.

Last update: 2024-11-14 09:16:57 UTC


README

Run multiple commands in another process and wait for completion.

Usage

(new CommandRunner([
            new Process("my:command -q"),
            new Process("my:command2 -q"),
            new Process("my:command3 -q").
            new Process("my:command4 -q"),
            new Process("my:command5 -q"),
            new Process("my:command6 -q --env=$env"),
        ]))
            ->continueOnError(true)
            ->setIO($this->io)
            ->setLimit(3)
            ->run();
            

Possible use case:

/**
 * Class UpdateCommand
 *
 * @package App\Command\Update
 */
class UpdateCommand extends AbstractCommand
{
    /**
     * Configures the current command.
     */
    protected function configure()
    {
        $this->setName('app:update')
            ->setDescription('execute updates');
    }

    /**
     * @param InputInterface  $input
     * @param OutputInterface $output
     *
     * @return int
     */
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $this->io->writeln('Running update scripts');

        sleep(5); # Sleep so user can abort update
        
        (new CommandRunner([
            new Process("my:command -q"),
            new Process("my:command2 -q"),
            new Process("my:command3 -q").
            new Process("my:command4 -q"),
            new Process("my:command5 -q"),
            new Process("my:command6 -q"),
        ]))
            ->continueOnError(true)
            ->setIO($this->io)
            ->setLimit(3)
            ->run();
            
        return 0;
    }
}