我在Symfony中有一些由cron触发的命令。我最近添加了LockHandler以确保当时只有一个命令在运行,但我觉得它更麻烦。这是我今天遇到的一个场景:
有一个命令由cron触发:$ lock = new LockHandler('someprocess');
完成它不应超过15分钟,但我注意到几个小时后处理过的数小时没有运行。
当我尝试手动运行该命令时,它告诉我已经有另一个实例在运行。
所以在这种情况下我怀疑有两件事:
该命令已运行,锁定了该进程但由于错误而停止并且从未释放锁。
这是一个超时,它也在没有释放锁定的情况下停止。
防止此问题的最佳做法是什么?
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();
}