【问题标题】:Executing function to alter database every 15 minutes每 15 分钟执行一次更改数据库的功能
【发布时间】:2015-09-13 00:57:18
【问题描述】:

我目前正在开展一个运行在线锦标赛的项目。通常情况下,网站管理员会在比赛开始时生成括号,但我们遇到了不一致的开始时间等问题,我正在寻找适当的方法来自动化这个过程。

我已经研究过每 x 分钟运行一次 cronjobs 以检查是否需要生成一个括号,但我担心重叠 cronjobs 的问题,必须通过 cpanel 等创建/管理 cronjobs。

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

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

编辑 想了想可以用这个作品吗?

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

我不需要传递用户输入或返回任何数据,我只需要一种触发事件的方法,仅在需要时通过帮助程序类包含它会很容易。此外,我不必担心用户尝试访问我可以将路由限制为仅 ajax 请求,因为输入不需要/使用任何内容或作为输出返回会发生什么?

【问题讨论】:

  • 一个 cron 作业可以通过使用咨询锁定来实现不重叠,即flock();或在您的 cron 配置中使用 /usr/bin/flock 本身。
  • 即使没有这些锁,当它们中有 15 分钟的间隔时,cron 作业如何重叠?该脚本运行需要这么长时间吗?
  • 我们举办各种比赛,其中一些比赛有 512 支球队参加。生成括号不需要 15 分钟我只是在想是否有可能,我还没有深入研究 cronjobs。

标签: php cron


【解决方案1】:

您可以在每次用户加载页面时执行此操作(此想法未经测试,但理论上可行):

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

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

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

此系统的一个明显缺陷是,如果您在 30 分钟内没有访客,您将错过 2 次更新。虽然我猜如果你没有访问者,你也没有必要生成括号?

【讨论】:

  • 我认为每 15 分钟检查一次会浪费页面加载,当锦标赛注册开放时,我会检查是否应该关闭注册,以便数据库可以更新锦标赛的注册状态。我希望找到一个解决方案来合并,这样我就可以在那里触发一个类似finish pageload for user and fire this script in backend 的事件。我现在正在研究 shell exec。
  • 一个几乎为空的文件上的简单 file_get_contents 对页面加载时间没有影响,但即使你认为它会在呈现所有 HTML 之后放置它(在页脚部分下方您的网页)。但如果需要,您也可以在您将使用 shell_exec 运行的实际脚本中执行此检查。
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 2017-04-12
  • 2013-06-25
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
相关资源
最近更新 更多