检测控制台脚本的最佳方法是什么?

时间:2014-10-13 18:37:47

标签: php symfony cron command

我尝试在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
        }

    }
}

此脚本将由crone每60秒运行一次,直到所有通信将更改为is_automoderated = 1

如果prev脚本没有结束,则下一个脚本会看到并且没有运行。

现在我想知道如何设置标志$flag_this_script_is_active。我想创建一些文件,并在脚本结束后删除它。但也许有更好的方法。也许一些symfony函数?

1 个答案:

答案 0 :(得分:0)

您可以将bash脚本用于此目的。使用ps aux | grep 'comments:update'查找已运行的命令,如果没有找到则运行它。我们在之前的项目中使用了这种方法来检测守护进程是否正在执行。