php - 如何实现单处理模式运行php脚本?

标签 php bash unix process locking

我有 cron 作业 - php 脚本,它在 5 分钟内调用一次。我需要确保之前调用的 php 脚本已完成执行 - 不想混合正在处理的数据。

我曾经应用过三种方法:

  1. 创建包含运行状态标志的辅助文本文件。执行的脚本分析文件的内容并在标志设置为 true 时中断。这是最简单的解决方案,但每次我创建这样的脚本时,我都觉得我又发明了一辆自行车。是否有任何众所周知的模式或最佳实践可以满足大多数需求?

  2. 添加 UNIX 服务。这种方法最适合 cron 作业。但开发和测试 UNIX 服务更耗时:需要良好的 bash 脚本知识。

  3. 使用数据库跟踪流程。很好的解决方案,但有时不鼓励使用数据库 - 不想发明自行车,希望已经有一个很好的灵活解决方案。

也许您对如何管理 php 脚本的单一处理有其他建议?很高兴听到您对此的看法。

最佳答案

我建议使用文件锁定机制。您创建一个文本文件,并让您的进程独占锁定它(请参阅 php flock 函数:http://us3.php.net/flock)。如果锁定失败,则退出,因为有另一个实例正在运行。 使用文件锁定的好处是,如果您的 PHP 脚本意外终止或被杀死,它会自动释放锁定。如果您使用纯文本文件作为状态,则不会发生这种情况(如果脚本设置为在执行结束时更新此文件并且它意外终止,您将留下不真实的数据)。

关于php - 如何实现单处理模式运行php脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1496855/

相关文章:

php - 使用 PHP 的“镜像”数据库连接

mysql - 是否可以使用 drush 将文件 rsync 到 MySQL 转储的 drush 转储目录?

linux - 当函数返回但函数中的命令在后台运行时会导致什么行为?

使用 SSL 时出现 PHP Curl 错误

php - 在PHP中更改所选选项的文本颜色

php - 将数据显示到输入文本字段中时出错

bash - 总是给出密码不够强的消息(否则条件正在运行)

macos - Mac终端killall命令是退出还是强制退出?

ruby - 在 Ruby 中创建一个双叉守护进程

python - 如何使用排序在 Unix 中按字母数字顺序排序?比看起来更复杂