繁体   English   中英

在cron php中处理并发

[英]handling concurrency in cron php

我正在设置一个cron作业,每分钟我想了解并发性,就执行脚本page.php。 脚本本身需要15分钟才能完成,那么cron将如何运行?

Lets take a time frame of 15 minutes, how many crons will run in that time? 1 or 15?

will cron runs till its completion or it can be interrupted?

Thanks.

当您通过cron启动php脚本时,它将一直运行直到完成或超过执行时间。 无论最后一个脚本是否仍在运行,系统都会始终启动该脚本的新实例。

如果您知道脚本运行了很长时间,则应该设置一个bash脚本来检查脚本是否已经在运行,如果不是这种情况,则仅启动php脚本。

Cron不会为您处理并发-您的脚本必须这样做。

事实证明,这很容易,因为有一个简单的PHP操作,即atomic: unlink()

我们倾向于以这种方式使用它:

  • 全局标志文件启用脚本
  • 主cron作业除了触摸计时器标志文件外什么也不做
  • 每分钟,另一个cron作业都会启动工作脚本
  • 此工作程序脚本在全局标志文件上尝试unlink()
  • 如果不成功(结果评估为false),则退出(这确保一次仅运行一个实例)
  • 此工作程序脚本在计时器标志文件上尝试unlink()
  • 如果不成功(结果评估为false),则touch() es全局标志文件并退出(这确保一次cron运行最多启动一个实例)
  • 现在运行
  • 完成后,它touch() es全局标志文件以重新开始循环

这样,cron运行将导致可并发性,并以可记录的方式被忽略。

这取决于您计划的任务/计划设置。 您可以配置为启动15次PHP脚本,或者在完成上一个作业后启动它。
您的计划任务/计划任务可能会被自身中断,外部信号或您在计划任务/计划任务中进行的配置打断(如果在N分钟内未完成,请停止作业...)。
希望有帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM