WARNING: You are browsing the documentation for Symfony 3.3 which is not maintained anymore. Consider upgrading your projects to Symfony 5.1.

Prevent Multiple Executions of a Console Command

3.3 version

Prevent Multiple Executions of a Console CommandΒΆ

New in version 3.2: The LockableTrait was introduced in Symfony 3.2.

A simple but effective way to prevent multiple executions of the same command in a single server is to use file locks. The Filesystem component provides a LockHandler class that eases the creation and release of these locks.

In addition, the Console component provides a PHP trait called LockableTrait that adds two convenient methods to lock and release commands:

// ...
use Symfony\Component\Console\Command\LockableTrait;

class UpdateContentsCommand extends Command
    use LockableTrait;

    // ...

    protected function execute(InputInterface $input, OutputInterface $output)
        if (!$this->lock()) {
            $output->writeln('The command is already running in another process.');

            return 0;

        // If you prefer to wait until the lock is released, use this:
        // $this->lock(null, true);

        // ...

        // if not released explicitly, Symfony releases the lock
        // automatically when the execution of the command ends

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.