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

标签 php cron collision

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

一些 options I've found recommend在文件上使用锁。

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

还有其他方法吗?

最佳答案

此样本取自 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);

不要使用诸如 /tmp/var/tmp 之类的位置,因为它们可能随时被您的系统清理,因此根据文档弄乱了你的锁:

Programs must not assume that any files or directories in /tmp are preserved between invocations of the program.

https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s18.html https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch05s15.html

使用您控制的位置。

学分:

关于PHP - 防止 Cron 中的冲突 - 文件锁定安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428631/

相关文章:

PHP preg_replace string – 括号内的内容

java - 碰撞避免示例或帮助

java - 从 map pacman java中删除点

php - 如何制作可搜索的下拉菜单

php - fetch(PDO::FETCH_ASSOC) 将 MySQL 查询的所有值返回到数组中

python - Hello World Cron 作业不工作

php - 防止从 php mysql 数据库中一遍又一遍地选择相同的数据

linux - 如何使服务不需要 super 用户密码输入?

python - 碰撞检测问题 - PyGame

PHP mysql 不匹配单个单词