我有cron job – php脚本,在5分钟内调用一次.我需要确保之前调用的php脚本已经完成执行 – 不想混合正在处理的数据.
我曾经使用过三种方法:
>创建包含运行状态标志的辅助文本文件.执行的脚本分析文件的内容,如果flag设置为true则中断.这是最简单的解决方案,但每次我创建这样的脚本时,我都觉得我再次发明了一辆自行车.是否有满足大多数需求的众所周知的模式或最佳实践?
>添加UNIX服务.这种方法对于cron工作来说是最好的.但是开发和测试UNIX服务需要花费更多时间:需要良好的bash脚本知识.
>使用数据库跟踪流程.很好的解决方案,但有时不鼓励数据库使用 – 再也不想发明自行车,希望已经有一个很好的灵活解决方案.
也许你有其他建议如何管理PHP脚本的单一处理?很高兴听到你对此的看法.
解决方法:
我建议使用文件锁定机制.您创建一个文本文件,并使您的进程独占锁定它(请参阅php flock function:http://us3.php.net/flock).如果它无法锁定,则退出,因为正在运行另一个实例.
使用文件锁定的好处是,如果您的PHP脚本意外死亡或被杀死,它将自动释放锁定.如果您使用纯文本文件作为状态,则不会发生这种情况(如果脚本设置为在执行结束时更新此文件并且意外终止,则会留下不真实的数据).