【问题标题】:every minute cron job sometimes not running每分钟 cron 作业有时不运行
【发布时间】:2015-02-04 07:16:35
【问题描述】:

我有几个执行 php 脚本的 cron 作业。 php 脚本有时会执行一些繁重的工作,例如一次更新 mysql 表中的数百条记录。

问题是作业应该每分钟运行一次。但是,它会随机丢失,因此不会每分钟执行一次。有时,它每 4-6 分钟执行一次,然后回到每 1 分钟一次,错过 2-3 次,然后再次正常。

我在 centos 6.5

请注意,php 运行正确,并且 php 脚本本身没有任何问题,因为在它运行时,我得到了预期的结果,并且同时运行了大约 10 个其他类似的脚本(每个分钟或其他脚本每 5 分钟一次)

工作:

/usr/bin/php "/var/www/html/phpScriptToExecute.php" >> /var/www/html/log/phpScriptLog.log 2>&1

我的看法是,同时运行的脚本太多,同时访问数据库可能是个问题。

最后信息:/var/log/cron 文件或phpScriptLog.log 文件中没有错误。

【问题讨论】:

  • 也许我需要调查的是,可以运行的并发php脚本的数量是否有限制。正如我之前所说,由于多个 cron 作业执行 php 脚本,有时可以同时运行多个 php 脚本。
  • 还有一件事 - 我正在为我的项目使用框架 codeigniter。也许问题出在那儿 - 我将尝试为相同的功能创建一些平面 php 文件,并检查与使用 codeigniter 启动的脚本相比,平面 php 文件是否运行正确。

标签: php cron centos6.5


【解决方案1】:

原因可能是,您的 cron 作业执行时间超过 1 分钟,在脚本结束时打印出开始时间和结束时间以验证它。 如果 cron 作业正在运行,linux 将不会再次执行它。

【讨论】:

  • 感谢您的回答。我已经添加了日志来检查。通常需要 1 分钟以上的时间来处理某些正常的事情和我期望的事情。但是,即使脚本没有要处理的内容,通常也需要 1-2 秒才能完成 - 即使在这些时间也会出现此问题。
  • @SuyashSumaroo 所以这个原因基本上是花了超过 1 分钟,对吧?
  • 是和不是。让我解释。有时脚本需要超过 1 分钟并且 cron 作业没有执行是正常的。但是大多数情况下,脚本不应超过 5 秒。即使在这些时候,有时 cron 作业也不会每分钟都运行。
【解决方案2】:

我的猜测是它是由 PHP 致命错误引起的,但您的 PHP 可能未配置为向 stderr 发送错误消息,这就是您的 phpScriptLog.log 为空的原因。您可以检查您的 php.ini(或仅使用 ini_set())的以下内容:

  1. display_errors:如果您希望错误显示在 stderr 上,请将其设置为 on/true
  2. log_errors:如果要将错误消息发送到文件,请将其设置为 true
  3. error_log:将其指向您希望存储错误的文件

或者,如果您想要一个避免重叠 cron 作业的解决方案,那么这里有很多 SO。

【讨论】:

  • 感谢您的回答。但是,我在 php 文件中添加了以下行: ini_set('display_errors', 1); - 所以错误通常应该像你提到的那样添加到stderr。至于重叠问题,我还添加了日志条目以检查脚本是否正在执行,但我什至没有得到日志条目 - 我认为你可能是对的,某处存在 php 错误 - 可能是超时或类似的东西那。我会检查那个方向。
猜你喜欢
  • 2019-11-19
  • 2013-11-27
  • 2013-06-12
  • 2018-02-18
  • 2014-08-07
  • 2017-10-15
  • 2011-06-20
  • 2012-08-08
  • 2013-07-08
相关资源
最近更新 更多