2015-06-26 214 views
4

我目前正在开展一个运行在线锦标赛的项目。通常情况下,网站的管理员在比赛开始时会生成括号,但我们遇到了不一致的开始时间等,我正在寻找适当的方法来自动执行此过程。执行功能每15分钟更改一次数据库

我已经看过投入运行cronjobs每隔x分钟检查一个支架需要生成,但我担心的问题,当谈到重叠cronjobs,不必创建/通过的cPanel等管理cronjobs

我正在考虑其他解决方案,并认为如果用户可以加载页面,后端将检查时间戳并确定是否应该生成支架将会很好。然后会触发/设置一个事件以在其他地方开始自动生成过程,因此不会影响用户加载时间。我只是不知道这样做的最佳路线。

PS:我只是需要一个想法,我应该看看,所以我可以学习如何解决这个问题,我不想复制和粘贴代码。我只是无法找到任何东西。我所有的搜索结果都提供了cronjob示例。

编辑 想过事情可以使用这项工作?

$(document).ready(function() { 
    $.ajax('Full Url Path Here'); 
}) 

我并不需要通过用户的输入,或者返回任何数据,我只是需要一种方法来触发一个事件,它会很容易通过一个辅助类仅在需要时包括这个。另外我不一定会担心用户试图访问我可以限制路由到ajax只有请求,因为什么都不需要/用于输入或返回作为输出可能会发生什么?

+0

通过使用建议锁定,可以使cron作业不重叠,即['flock()'](http://php.net/flock);或者在cron配置中使用'/ usr/bin/flock'本身。 –

+0

即使没有这些锁,当cron作业间隔15分钟时,cron作业将如何重叠?该脚本需要很长时间才能运行? –

+0

我们运行各种比赛,其中一些比赛达到512支球队。生成括号不会花费15分钟我只是想,如果有可能,我还没有深入到cronjobs广泛。 – ICJ

回答

0

你能做到这一点,每次用户加载一个页面(先不要测试,但理论上是可能的):

1)创建一个文件,并存储您更新数据库最后一次的时间戳。

2)每次用户加载页面时,请阅读该时间戳并检查是否经过了15分钟。

3)如果15分钟过去了:运行一个后台脚本(使用shell_exec?),它将执行您想要的操作并更新完成时的时间戳。

这个系统的一个明显缺陷是,如果你没有访问者,比如30分钟的框架,你会错过2次更新。虽然我猜如果你没有访问者,你也没有必要产生括号?

+0

我认为每15分钟检查一次将会浪费网页上的资源,并且在锦标赛注册开放时我会检查注册是否应该关闭,以便db可以更新锦标赛的注册状态。我希望找到一个解决方案,以便在那里合并,所以我可以在那里发起一个事件,做一些事情,比如'为用户完成页面载入并在后端激发这个脚本。我正在寻找shell exec。 – ICJ

+0

几乎为空的文件上的一个简单的file_get_contents对页面加载时间没有影响,但即使您认为它可以在渲染完所有HTML之后(在网页的页脚部分下方)放置它。但是,如果你愿意,你也可以在shell_exec中运行的实际脚本中进行检查。 – Tom

相关问题