50% discount in conference replays
2020 and 2021 events
In English, French, German, Polish and Spanish

Prevent Multiple Executions of a Console Command

Edit this page

Warning: You are browsing the documentation for Symfony 3.3, which is no longer maintained.

Read the updated version of this page for Symfony 6.0 (the current stable version).

Prevent Multiple Executions of a Console Command

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// ...
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->release();
    }
}
This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.