【问题标题】:php time_sleep_until() and "Mysql server has gone away"php time_sleep_until() 和“Mysql 服务器已经消失”
【发布时间】:2011-03-19 08:16:30
【问题描述】:

我有必须在每 n 分钟后执行的脚本。 n 分钟是动态的,因此我无法设置 cron 作业来调用脚本(在特定时间)。

所以我所做的是将每 n 分钟后的时间存储在一个数组中,以便在执行脚本时,它会首先检查当前时间是否在数组中。如果在数组中找到,则继续执行,否则退出。

要执行脚本,我必须使用 cron 作业每分钟运行一次以检查数组中的时间。不幸的是,我的虚拟主机只允许 5 分钟作为最短间隔。所以每次调用脚本时,我都会检查是否在数组中找到$current_time$current_time + (4*60) // 4 minutes 之间的值。如果是,并且如果需要,我使用time_sleep_until 来延迟脚本,直到时间达到在数组中找到的值。

所以如果我的脚本在 10:05 执行并且在数组中找到的值为 10:06,我让脚本休眠到 10:06,然后继续执行。但是,如果睡眠时间超过一分钟左右,我会得到一个Mysql server gone away

我怎样才能防止这种情况发生?还是有更好的方法来做到这一点?

谢谢!

【问题讨论】:

  • 睡觉前断开连接,之后重新连接?
  • 还没想到,试试看。谢谢!

标签: php mysql cron


【解决方案1】:

有几个选择,我不知道哪个更好。

第一,确保您的脚本可与 CLI 一起使用,并在那一分钟后使用 http://www.php.net/exec 函数调用它(如果您的主机允许)。

第二,设置一个脚本,以可能的哈希作为键,并在分钟结束后使用标头重定向,这将调用全新的脚本,从而建立新的 MySQL 连接。

第三个选项是像两个一样设置脚本,除了在您的计算机上设置一个计划任务/ cron 作业以打开该页面(它必须在 webroot 中)并每分钟调用一次,或者根据您的需要调用它.这不是固定方法,而是取决于您的计算机的运行情况。

第四,类似于第三个,但使用免费的 cron 作业托管服务,例如:http://www.onlinecronjobs.com/en

希望对您有所帮助。如果我想到其他选项,我会更新。

【讨论】:

  • 我会检查前两个,因为我不熟悉它,但我不能选择第三个。而且我不知道有这样的在线服务,这很好。感谢您的帮助!
  • 我使用了您的第二个建议来解决类似问题 - 这次是最长执行时间,谢谢!
猜你喜欢
  • 2011-11-09
  • 1970-01-01
  • 2011-06-07
  • 2010-12-20
  • 2015-01-15
  • 2016-03-06
  • 2017-04-02
  • 2014-02-12
相关资源
最近更新 更多