Каков наилучший способ обнаружения консольного скрипта?

Я пытаюсь сделать консольную команду в Symfony2:

class UpdateCommentsCommand extends ContainerAwareCommand
{
protected function configure()
{
$this->setName('comments:update')
->setDescription('Update comments');
->addArgument('force', InputArgument::OPTIONAL, 'force', false)
}

protected function execute(InputInterface $input, OutputInterface $output)
{

if (!$input->getArgument('force') && if $flag_this_script_is_active) {
return;
}
$flag_this_script_is_active = True

$em = $this->getContainer()->get('doctrine')->getEntityManager();
// Bad comments
$update_commang = $em->createQuery("UPDATE MyBundle:CommentsAll AS c
SET
c.is_automoderated =    1
WHERE
bla_bla_bla LIMIT 100
");
$result = $update_commang->getResult();
if ($result > 0) {
//Re-run this script with --force argument
} else {
$flag_this_script_is_active = false
}

}
}

Этот скрипт будет запускаться каждые 60 секунд кроной и продолжаться до тех пор, пока все комнеты не будут изменены на is_automoderated = 1

Если предыдущий скрипт не закончен, следующий скрипт видит это и не работает.

Теперь я хочу знать, как установить флаг $flag_this_script_is_active, Я хочу создать какой-нибудь файл и удалить его после завершения скрипта. Но, может быть, есть лучший способ. Может быть, некоторые функции Symfony?

0

Решение

Вы можете использовать скрипт bash для этой цели. использование ps aux | grep 'comments:update' найти уже запущенную команду и запустить ее, если ничего не найдено. Мы использовали такой подход в предыдущем проекте, чтобы определить, выполняются ли демоны.

0

Другие решения

Других решений пока нет …