2014-11-08 45 views
0

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

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. 

回答

0

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

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

0

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

原来,这很容易,因为有一个微不足道的PHP操作,那就是原子:unlink()

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

  • 全局标志文件使脚本
  • 主要cron作业不只是摸了计时标志文件
  • 每一分钟,另一cron作业开始工人脚本
  • 这个工人脚本在全局标志文件
  • 试图unlink()如果不suceed(结果评估为假),它退出(这可以确保,只有一个实例[R同时UNS)
  • 这个工人脚本试图在计时器标识文件unlink()
  • 如果不suceed(结果评估为假),它touch()上课全局标志,文件和退出(这可以确保,一个cron运行开始至多一个实例)
  • 现在完成后运行
  • ,它touch()上课全局标志文件重新启动的周期

这样,cron的运行,这将导致并发性,被排除在外以可记录的方式。

+0

这不是我的问题 – Badddy 2014-11-08 15:59:02

+0

你可能会考虑编辑你的问题来解释它好一点 - 也许我不是唯一一个误解它? – 2014-11-08 20:47:15

0

它取决于您的计划任务/ cron设置。您可以配置启动15次PHP脚本,或者在完成上一个作业时启动它。
您的计划任务/ cron可以由它自己中断,通过外部信号或通过您在计划任务/ cron中所做的配置(如果在N分钟内未完成,则停止作业...)
希望对您有所帮助:)