PHP - 防止Cron中的冲突 - 文件锁安全吗?

Ben*_*Ben 16 php cron collision

我正在尝试找到一种安全的方法来防止cron作业冲突(即,如果另一个实例已在运行,则阻止它运行).

我发现一些选项建议在文件上使用锁定.

这真的是一个安全的选择吗?例如,如果脚本死亡会发生什么?锁会保留吗?

还有其他方法吗?

zer*_*kms 28

这个样本是在http://php.net/flock上拍摄的,稍微改了一下,这是一个正确的方法来做你想要的:

$fp = fopen("/path/to/lock/file", "w+");
if (flock($fp, LOCK_EX | LOCK_NB)) { // do an exclusive lock
  // do the work
  flock($fp, LOCK_UN); // release the lock
} else {
  echo "Couldn't get the lock!";
}
fclose($fp);
Run Code Online (Sandbox Code Playgroud)

积分:

  • 然而,可能不会立即显而易见的是,即使无法建立锁定,它也会覆盖内容,我的观点是使用`c +`会产生与`w +`相同的结果,除非它不会产生这个问题.希望如果有人有这个问题,他们会阅读我的评论. (5认同)
  • @Ben:如果脚本死掉,那么flock获得的锁将被释放. (3认同)
  • 工作良好.但是我在`fopen`中使用`w +`模式,以防锁文件不存在. (3认同)