在Symfony

时间:2017-05-02 23:12:14

标签: symfony

我在Symfony中有一些由cron触发的命令。我最近添加了LockHandler以确保当时只有一个命令在运行,但我觉得它更麻烦。这是我今天遇到的一个场景:

  1. 有一个命令由cron触发:$ lock = new LockHandler('someprocess');

  2. 完成它不应超过15分钟,但我注意到几个小时后处理过的数小时没有运行。

  3. 当我尝试手动运行该命令时,它告诉我已经有另一个实例在运行。

  4. 所以在这种情况下我怀疑有两件事:

    1. 该命令已运行,锁定了该进程但由于错误而停止并且从未释放锁。

    2. 这是一个超时,它也在没有释放锁定的情况下停止。

    3. 防止此问题的最佳做法是什么?

      protected function execute(InputInterface $input, OutputInterface $output) {
      
          $lock = new LockHandler('someproccess');
      
          if (!$lock->lock()) {
              $output->writeln('This command is already running in another process.');
      
              return 0;
          }
      
          $this->dosomething();
      
          $lock->release();
      }
      

0 个答案:

没有答案