php time_sleep_until()和“Mysql服务器已经消失”

php time_sleep_until()和“Mysql服务器已经消失”

问题描述:

我有脚本,必须在每n分钟后执行。 n分钟是动态的,因此我无法设置cron作业来调用脚本(在特定时间)。php time_sleep_until()和“Mysql服务器已经消失”

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

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

因此,如果我的脚本在10:05执行,并且在数组中找到的值是10:06,那么我会让脚本在它继续执行之前一直睡到10:06。但是,如果睡眠时间超过一分钟左右,我得到一个Mysql server gone away

我该如何预防?还是有更好的方法来做到这一点?

谢谢!

+3

睡前断开连接,重新连接后? – Charles 2010-07-22 03:37:48

+0

还没有想到,会试试看。谢谢! – u11 2010-07-22 04:05:27

+0

谢谢查尔斯,它工作! – u11 2010-07-24 08:56:56

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

一,确保您的脚本可以与CLI协同工作,并在此后的一分钟内用http://www.php.net/exec函数(如果您的主机允许)调用它。

二,设置了一个脚本,可能使用散列作为键,并在分钟结束后使用标题重定向,这会调用脚本全新的脚本,以便创建新的MySQL连接。

第三种方法是将脚本设置为两个一样,除了在打开该页面的计算机上设置计划任务/ cron作业(它必须位于webroot中)并且每分钟或每分钟调用一次想。这不是一种设置方法,但取决于您的计算机的使用量。

第四,与第三,但使用托管服务一样免费cron作业:http://www.onlinecronjobs.com/en

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

+0

我会检查前两个,因为我不熟悉它,但我不能与第三个一起去。我不知道有这样的在线服务,这很好。谢谢您的帮助! – u11 2010-07-22 04:02:39

+0

我用你的第二个建议来解决类似的问题 - 这次是最大的执行时间,谢谢! – u11 2010-07-24 08:55:41