Вы можете использовать блокировку, чтобы гарантировать, что команда запускается только один раз за раз. Symfony предоставляет помощник LockHandler
, но вы можете легко сделать это с помощью простого PHP.
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Filesystem\LockHandler;
class WhateverCommand extends Command
{
protected function configure() { }
protected function execute(InputInterface $input, OutputInterface $output)
{
$lock = new LockHandler('a_unique_id_for_your_command');
if (!$lock->lock()) {
$output->writeln('This command is already running in another process.');
return 0;
}
// ... do some task
$lock->release();
}
}
Обработчик замок как @Stefan предложил, безусловно, наиболее эффективным, так что вы избежать условий гонки и является масштабируемой, если вы хотите запустить несколько раз с различными идентификаторами или распространение данных. –
Блестящий! Благодаря! – nikoss
Мне нравится ваш код! И я не знал об этом - теперь я знаю, спасибо!) –