在将来的确切时间执行脚本


Executing a script at an exact time in future

我从事一个PHP项目,用户在该项目中发布广告。当广告发布在网上时,它会被指定一个"隐藏日期"(存储在数据库中),届时它将不再向用户显示。当"隐藏日期"(例如下周一上午10:00)发生时,我需要启动一个在数据库中进行更改的脚本(与隐藏广告无关)。

问题:如何在将来的确切时间运行脚本(在"隐藏日期")。

我搜索了很多,没有找到任何好的解决方案。

找到可能的解决方案:

  • Cron不再被考虑,因为它缺乏准确性(对我的任务来说,即使是几秒钟也很重要)。

  • 编写一个守护进程,它将每秒检查是否有带有"隐藏日期"的记录,但这可能非常耗时。

  • 另一种方法是,我被告知消息队列可能会有所帮助,但在阅读了一些文档后,我没有找到设置处理队列中消息的日期和时间的方法。

有人能指出去哪里看吗?考虑任何工具/语言。

让我们假设广告显示到
之后的一周在广告表中创建一个名为expiry_date(时间戳)的字段
插入新广告时,执行以下

$expiry_date = strtotime("+ 7 days");

然后插入有效期和记录
接下来,在显示广告的页面中,只选择到期日尚未过去的广告,因此

SELECT * FROM ads WHERE expiry_date >= NOW()

这将只显示尚未过期的广告。

如果您的站点运行在linux服务器上,您可以添加一个cron作业来触发更新脚本。

如果您的站点正在运行Windows,请改用任务计划程序。

然而,这听起来并不是你的最佳解决方案。您可以将"隐藏日期"与帖子的其余数据一起存储在数据库中。然后,您可以简单地过滤显示代码中的帖子。