Php 机架空间、负载平衡、flush()和cURL

Php 机架空间、负载平衡、flush()和cURL,php,cron,load-balancing,rackspace,Php,Cron,Load Balancing,Rackspace,首先,如果这个问题含糊不清或令人困惑,我道歉。事实是,我对发生的事情感到非常困惑,更困惑的是如何补救 我正在Rackspace云服务器上工作。如您所知(如果您正在阅读此问题),Rackspace使用了一个负载平衡器,它倾向于杀死持续30秒以上的脚本。不幸的是,我正在编写一个庞大的处理脚本,其中涉及许多大型文件的传输。不用说,脚本有时可能需要一个小时才能运行。幸运的是,这个脚本不需要经常运行。不幸的是,对于我的老板来说,我一直在使用机架空间云,升级根本不是一个选项 通过使用PHP的flush()函

首先,如果这个问题含糊不清或令人困惑,我道歉。事实是,我对发生的事情感到非常困惑,更困惑的是如何补救

我正在Rackspace云服务器上工作。如您所知(如果您正在阅读此问题),Rackspace使用了一个负载平衡器,它倾向于杀死持续30秒以上的脚本。不幸的是,我正在编写一个庞大的处理脚本,其中涉及许多大型文件的传输。不用说,脚本有时可能需要一个小时才能运行。幸运的是,这个脚本不需要经常运行。不幸的是,对于我的老板来说,我一直在使用机架空间云,升级根本不是一个选项

通过使用PHP的
flush()
函数,再加上一些微不足道的空格,我几乎总能避免这个超时问题。这不是一个很好的解决方案,但考虑到我的局限性和对传输脚本的使用,它工作得非常好

…当我在浏览器中加载脚本时

当我尝试使用cron作业调用脚本时,脚本只是超时。当我试着给它打电话时,它也超时了。但是,当我将其加载到浏览器中时,一切似乎都恢复正常

我如何解决这个问题?我需要使用cron作业调用此脚本,但无论我做什么,它似乎总是失败

谢谢你的帮助

取决于脚本的计时方式。 如果是racksace负载平衡器超时,您可以通过API调整负载平衡器超时,最长可调整120秒。如果需要脚本运行更长的时间,可能需要将工作分成几个较小的部分。无论如何,这是一个好主意,因为执行时间长会导致网络中断问题,在这种情况下,可以运行几个较小的脚本,并且每个脚本都更容易验证

参考:

=== 如果您正在点击php.ini max_execution_time,那么通过循环(我不知道您的代码)或类似方法调用
set_time_limit(20)
每次迭代都会持续重置计时器

从php.net:

调用set_time_limit()时,将从零重新启动超时计数器。 换句话说,如果超时是默认的30秒,则为25秒 在脚本执行后的几秒钟内,将执行诸如set_time_limit(20)之类的调用 完成后,脚本将在超时前总共运行45秒

参考:


我在脚本开头调用
设置时间限制(0)
。虽然这避免了PHP超时,但它并没有避免Rackspace云的负载平衡超时,这正是我试图解决的问题。