Cron设置用于检索实时体育比分

use*_*672 6 php apache cron crontab plesk

我正在开发一个移动应用程序,显示英超足球比赛的现场比分.当游戏开始时,我想每30秒查询一次外部API以检索最新的分数.大多数游戏在开始3pm的一个星期六,但一些在开始12.45pm时,其他人1.30pm,2pm3pm在星期日和一些期间的最晚时间一周8pm.

我有一个表在我的数据库填充了所有固定装置的赛季,他们在开始的时间.

所以我猜我需要运行每一个cron 15分钟之间12.458pm(游戏永远不会启动这些时间之外),检查我的数据库,看是否有游戏开始.然后,如果有比赛的首发,另外的cron必须开始一个查询外部API每30秒在那场比赛的最新比分.这个cron会大约运行1 hour and 45 minutes.

实现这种cron设置的最佳方法是什么?我与在其上运行的Plesk软件在共享服务器上,并没有对服务器的SSH访问权限.

mu *_*u 無 2

从你的评论之一来看

主要问题是我在一个没有 ssh 访问权限的共享服务器上......

我认为这里的问题是您无权访问命令 shell,只能使用 Plesk 将文件呈现到服务器。因此,为了呈现您的解决方案,您将使用 cron 作业。

在这种情况下,我建议您仔细检查您的托管提供商,了解您可以运行的 cron 作业数量/cron 作业允许的最低频率的任何限制。如果 cron 作业的处理有限制,您可以使用在线 cron 调度程序(如下所示。请注意,外部 cron 服务仅允许访问可公开访问的 URL,因此您需要相应地编写和部署代码。

从今以后,我将假设您的 cron 作业正在运行并且没有任何问题。

当游戏开始时,我想每 30 秒查询一次外部 API 以检索最新的分数。大多数比赛在周六下午 3 点开始,但有些比赛在中午 12.45 开始,其他比赛在周日下午 1.30、下午 2 点和下午 3 点开始,有些比赛在一周中最晚开始时间为晚上 8 点。

方法一

使用单个updateMatchesAndScores.php文件更新任何新比赛的比赛信息(在数据库中标记为活动/关闭),并更新当前活动比赛的分数。

Cron 作业无法处理这种逻辑,如果匹配打开,然后才运行它,该逻辑必须转到脚本。

12-10 PM然后你可以像下面这样运行它

* 12-22 * * * php -f updateMatchesAndScores.php
* 12-22 * * * sleep 30 && php -f updateMatchesAndScores.php
Run Code Online (Sandbox Code Playgroud)

如果是 url http://some.server.address.com/updateMatchesAndScores,则变为

* 12-22 * * * wget http://some.server.address.com/updateMatchesAndScores
* 12-22 * * * sleep 30 && wget http://some.server.address.com/updateMatchesAndScores
Run Code Online (Sandbox Code Playgroud)

假设游戏在时间范围内发生,您可以将其分解为多个 cron 作业 ( 12.45-12.59,, 13:00-20:59) 。这将优化不必要的运行等等。21:00-21:45[12.45, 21:45]12.00-12.45

方法2

使用一次性 cron 作业启动一个守护进程,然后每分钟检查它是否仍在运行。

让我们调用脚本updateMatchesAndScores.php。将睡眠功能放入其中 (1) 如果没有游戏,则为 15 分钟 (2) 如果有游戏,则为 30 秒 (3) 从 21:46 到第二天 12:44 睡眠。您可以为每个游戏生成一个单独的子进程,这样您就不必在此脚本中实现每 30 分钟睡眠一次的 (2)。

注意事项 - (1) 脚本的执行时间将开始稍微延迟代码,因此 15 分钟很快就会变成 15 分钟x 秒(2) php 中有一个最大执行时间,所以你必须设置它(3) 根据您的代码质量,可能存在内存泄漏,对您的影响较小。

这里的优化可能是使用 cron 作业每天运行该进程(在最后一场比赛结束后停止 - 无论是 21:46 还是 4:30),如果尚未运行,则相应地重新启动它。