【问题标题】:Cron Job timing ScheduleCron 作业时间安排
【发布时间】:2015-06-23 05:36:28
【问题描述】:

我有一个提供 RSS 提要的 PHP 网页,但生成响应大约需要 15-20 秒(然后将在服务器上缓存 10 分钟以加快响应速度)。

如何为这个操作设置一个 cron 作业时间?我有这个问题。我想如果我在 10 分钟之前调用该页面,它将运行缓存页面,因此我不会获得最新更新的页面,这是真的吗?如果我在 10 分钟后调用该页面,那么我是否需要等待 15-20 秒才能得到响应?

我如何设法使这个过程能够快速响应更新的提要?我以前没有尝试过cron作业,这是我第一次,所以我觉得这很混乱。

我的 cron 命令是:*/10 * * * * wget http//www.example.com/multifeed.php

对吗?

【问题讨论】:

  • 你可以做类似*/10 * * * * php /path/to/script.php > /path/to/rss.xml的事情。您的 cron 通常使用 crontab -e 配置,但有些主机提供了一个控制面板。是的,如果您每 10 分钟缓存一次,那么您提供的 RSS 将在 0-10 分钟之间,具体取决于您的 cron 触发时间和用户访问时间。
  • (缓存通常是一个好主意,虽然 15-20 秒听起来确实很慢,您也可能希望解决这个问题)。
  • @halfer 它从 3rd 方站点获取提要,所以我相信它需要这么多才能调用 3rd 方页面并提供服务。但问题是我什么时候应该调用 php 脚本来运行该页面?
  • 对了,第三方系统可能会比较慢,好吧。我不确定我是否理解您的后续问题 - 上面的行在您的 crontab 中。 Cron 每 10 分钟自动运行一次脚本,并编写一个 XML 文件,您的 Web 服务器可以按原样提供该文件。
  • 我通过增加超时找到了解决这个问题的方法。我知道这不是最佳实践。因此,一位用户现在必须等待 15 秒,而其他用户将获得更快的响应。在 Multifeed.php 中,我没有使用单行 xml 代码。

标签: php cron-task


【解决方案1】:

你不会有一个完美的 cron 来尽快带来新数据,我认为这是你必须忍受的限制。

我要做的是每 2 分钟运行一次这个 cron 并尝试获取新数据,我会检查最后一次更新是否与我已有的不同,如果是,则更新文件,如果不是,什么都不做,等待下一个 cron。

此方法将提供最多两分钟的陈旧数据。

另一个选项是检查 hte 文件的 mtime:http://php.net/manual/en/function.filemtime.php

基本上,我访问你的页面,我们检查文件的 mtime,如果大于 10 分钟,我们获取新鲜数据,这与 cron 结合,可以为用户提供一种始终看到新鲜数据的方式。如果信息的新鲜度不是那么重要(你能忍受两分钟的陈旧数据吗?),如果不是那么重要,只需运行两分钟的 cron。

希望对你有帮助。

【讨论】:

  • 唯一需要注意的是第三方网站是否对每天来自单一来源的 720 个请求感到满意。这不是一个很大的负载,但如果站点操作员在他们的日志中看到频繁和常规的 IP 地址,他们可能会倾向于阻止(特别是如果每​​个需要 15 秒以上的时间来呈现)。最终还是要看 OP 是否有 fetch 的权限。
  • @halfer 我正在从他们的网站获取 rss 提要我所做的是将它们转换为完整提要,这就是为什么它需要 15-20 秒的时间,我猜
  • @Roon13 Halfer 有一点,如果你有一种从服务器获取最后更新时间的方法,那就更好了,使请求更便宜、更快。
  • 现在我明白你的意思了。我没有那个实现,所以我会先处理它,然后我会让你知道它是否有效。谢谢哈弗和帕特里克
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 2018-03-09
  • 1970-01-01
  • 2019-03-27
相关资源
最近更新 更多