【问题标题】:Limit to cron job with PHP限制使用 PHP 的 cron 作业
【发布时间】:2011-01-17 11:46:51
【问题描述】:

我有一个使用 PHP 的 Cron 作业,我想在我的虚拟主机上设置它,但目前脚本需要大约 20 秒才能运行,只有 3 个用户数据被刷新。如果我有 1000 个用户 - 需要很长时间。有没有替代 Cron Job 的方法?我的网络主机是否允许我运行一个 cron 作业,例如需要 10 分钟才能运行?

【问题讨论】:

  • 你有什么样的主机共享主机?那你就不能连续运行一个 PHP 脚本 10 分钟!

标签: php cron web-hosting


【解决方案1】:

您的 cron 作业可以随心所欲。

您的主要问题是您必须确保下一个 cron 作业不会在第一个作业仍在运行时执行。您有很多解决方案可以避免它,基本上使用信号量。

可以是锁文件,也可以是数据库中的记录。您的 cron 作业应该检查前一个作业是否完成。一件好事是,如果他因为很久以前的工作而无法运行,可能会向您发送一封电子邮件(这样您会收到一些通知,提醒您可能出现问题)默认情况下,退出时出现错误 dstatus 的 cron 作业正在输出所有运行作业的帐户的电子邮件的标准输出,具体取决于平台的配置方式,您可以使用此行为或在作业上建立 smtp 连接(或将警报存储在数据库表中)。

如果您想要一些替代 cron 作业的方法,您应该查看 工作队列。您可以将工作队列与 cron 作业混合使用,或者在 apache-php 环境中使用工作队列,有很多解决方案,但主要思想是在应该完成的事情的单个队列上进行,然后一个接一个地执行它们(但是小心,如果你处理这些任务的速度很慢,你会得到一个很大的等待队列)。

【讨论】:

  • 好的建议,谢谢,我只想每天运行一次,所以我希望运行时间不会超过 24 小时!我更多来自 PHP 超时或类似情况,这是否会发生在一个庞大的脚本中?
  • 在cli模式下运行时需要检查max_execution_time php配置设置的值(它可以/应该与apache模式下的不同),还要检查memory_limit。
【解决方案2】:

一项 cron 作业不应该与完成“作业”所需的时间有任何关系。如果你的工作需要 20 秒才能完成,那是 PHP 的错,而不是 cronjob。

我的虚拟主机是否会让我运行一个需要 10 分钟才能运行的 cron 作业?

询问您的虚拟主机。

如果您想了解优化 php 脚本,请查看Profiling PHP Code

【讨论】:

  • 好的,我明白了,但是如果我的脚本需要 10 分钟才能运行 - 这有什么影响?
  • @benhowdle89 如果没有更多信息,很难回答这个问题。通常,操作系统并不关心运行需要多长时间。但总是有其他因素。它是否与任何系统资源(CPU、RAM、磁盘 I/O)挂钩?其他服务会因为系统利用率而受到影响(即 apache 会因为 cron 占用所有 cpu 而挂起)吗?您的主机是否实施了任何类型的限制?
猜你喜欢
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 2011-02-18
  • 1970-01-01
  • 2011-09-14
  • 2015-01-03
相关资源
最近更新 更多