vBulletin 等脚本如何在不使用 cron 作业的情况下启动定期维护作业?

Posted

技术标签:

【中文标题】vBulletin 等脚本如何在不使用 cron 作业的情况下启动定期维护作业?【英文标题】:How do scripts such as vBulletin launch regular maintenance jobs without using cron jobs? 【发布时间】:2012-10-13 18:25:25 【问题描述】:

vBulletin 等脚本如何在没有 cron 作业的情况下启动常规维护作业?例如,vBulletin 不会实时更新线程视图计数,并且根据其文档仅每小时更新一次。但是,他们不使用 cron 作业来做到这一点,那么他们是如何做到的呢?

我问是因为我想在我的一个网站上做类似的事情,但不知道他们是如何做到这一点的?

【问题讨论】:

【参考方案1】:

我相信他们使用页面加载和时间戳。换句话说,每次您的论坛收到页面浏览量时,它都会检查当前时间与下一个计划作业的时间。如果当前时间是>=预定时间,则作业将运行。

当然,这样做的缺点是,如果您的论坛没有获得大量的页面浏览量,您就不能保证工作会在特定时间运行。准确性与您论坛上的活动直接相关。

【讨论】:

@Mitzimoto:很有趣,谢谢。您能否提供一个非常基本的 php 示例,以便我可以更好地理解您的意思并接受您的完整答案?例如,我不明白他们实际上是如何跟踪下一个预定工作的时间的。【参考方案2】:

@Mitzimoto 是正确的。 https://www.vbulletin.com/docs/html/scheduled_tasks_intro

vBulletin 的计划任务系统不会像 Windows® 中的 cron 和计划任务那样一直在服务器上运行。当用户浏览您的看板时,任务会自动运行,因此如果您的看板在给定时间没有任何流量,则计划运行的任务将在稍后运行。 vBulletin 的计划任务也不会在您关闭时运行。

【讨论】:

谢谢。它实际上如何跟踪下一个计划的作业何时运行(例如它存储在哪里)?在每次页面加载时检查这个不是会产生很多开销吗? 感谢您提供文档来支持我的回答。 @Programmer 我不确定 vBulletin 的确切实现,但有很多方法。有些网站只运行“最近运行的计划任务”检查,例如,第 100 次网页浏览(通过在每次页面加载时生成随机数)。其他人则在每次网页浏览时都这样做(这通常是一个只需要几毫秒左右的查询)。其他人只在某些页面上这样做 - 也许是主论坛列表而不是单个线程。通常信息会存储在数据库中的某个地方,但也可以使用文本文件。

以上是关于vBulletin 等脚本如何在不使用 cron 作业的情况下启动定期维护作业?的主要内容,如果未能解决你的问题,请参考以下文章

从命令行运行但不能通过 cron 运行时脚本运行良好

如何在不增加成本情况下使用Cloudflare Cron 触发器?

如何使用 rbenv 和 cron 运行 Ruby 脚本

如何使用 php 脚本创建 cron 作业?

如何使用 cpanel cron 作业执行 .sh 脚本

使用cron进行调度时如何在shell脚本中grep命令的输出