让PHP脚本循环永远从队列系统执行计算作业

时间:2010-06-04 19:21:39

标签: php amazon-sqs

目前我有一个perl脚本,它在我的服务器上永远运行,检查SQS以获取要计算的数据。这个脚本已经运行了大约6个月,没有任何问题。

所以,现在我想切换到PHP的CLI,并让脚本永远循环。主要是因为我对PHP更熟悉。

基本上,

$i="forever";
while($i==="forever"){
    doSomething();
    sleep(10);
}

该脚本将执行shell_exec(“/ shell_script.sh”);这可能需要2个小时才能完成。这会触发最大执行时间或类似时间吗?

这样做“好”吗?如果没有,有哪些替代方案?

5 个答案:

答案 0 :(得分:6)

您需要确保将脚本的最长执行时间设置为零,以便不会施加时间限制。您可以使用

从PHP文件执行此操作
set_time_limit(0);

或者您可以在php.ini文件中设置它。 (有关更多信息,请参阅set_time_limit上的PHP手册)。除此之外,你的方法应该可以正常工作。

然而,没有必要设置变量并检查它以便永远循环,

$i="forever";
while($i==="forever")

您只需执行while(true)while(1)

答案 1 :(得分:5)

就个人而言,我会使用Python或Perl来执行此类任务。 PHP实际上更像是一种用于编写网站和服务的特定于域的语言。

答案 2 :(得分:3)

只是旁注,其他人建议通过set_time_limit

来限制时间限制
  

由于使用的无限可能性   PHP在shell环境中最大化   执行时间已设置为   无限。而应用程序   为网络写的经常被执行   很快,shell应用程序倾向于   有更长的执行时间。

Using PHP from the command line>> Differences to other SAPIs

因此,在命令行上实际运行PHP脚本不会受到执行时间限制的影响。

答案 3 :(得分:1)

我对unix不太熟悉,但我认为人们可以使用“cron”来完成日常任务。用您选择的脚本语言编写任务,并由Cron定期执行。

答案 4 :(得分:0)

如果你想做的就是无限循环那么

$i=1;
while($i===1){
    doSomething();
    sleep(10);
} 

简单地说,只要$ i为1,脚本就会继续运行,$ i永远不会改变...只有问题是你可能有一个执行时间限制所以如果你这样做那么使用这个或类似的

for($i=1; $i<100; $i++){
    doSomething();
    sleep(10);
} 
header("Location: samepage.php:);

修改 忽略我的帖子 使用Having a PHP script loop forever doing computing jobs from a queue system