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

让PHP脚本循环永远从队列系统执行计算任务,php,amazon-sqs,Php,Amazon Sqs,目前,我有一个永远在服务器上运行的perl脚本,用于检查SQS中要计算的数据。这个脚本已经运行了大约6个月,没有任何问题 所以,现在我想切换到PHP的CLI,让脚本永远在那里循环。主要是因为我更熟悉PHP 基本上 $i="forever"; while($i==="forever"){ doSomething(); sleep(10); } 该脚本将执行一个shell_exec(“/shell_script.sh”);这可能需要2小时来处理。这是否会触发最大执行时间或类似事件

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

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

基本上

$i="forever";
while($i==="forever"){
    doSomething();
    sleep(10);
}
该脚本将执行一个shell_exec(“/shell_script.sh”);这可能需要2小时来处理。这是否会触发最大执行时间或类似事件


这样做“行”吗?若否,有何选择

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

您需要确保将脚本的最大执行时间设置为零,这样就没有时间限制了。您可以使用

set_time_limit(0);
也可以在php.ini文件中进行设置。(有关更多信息,请参阅上的PHP手册)。除此之外,你的方法应该很有效

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

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

你只需做
while(true)
while(1)

就可以了,如果你想做的只是有一个无止境的循环

$i=1;
while($i===1){
    doSomething();
    sleep(10);
} 
简单地说只要$i是1,脚本就会继续运行,$i就不会改变,所以。。。唯一的问题是,您可能有一个执行时间限制,所以如果您这样做,那么就使用这个或类似的方法

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

for($i=1;$i我对unix不是很熟悉,但我认为人们可以使用“”来执行日常任务。用自己选择的脚本语言编写任务,并由Cron定期执行。

只是一个旁注,正如其他人建议通过
设置时间限制
来改变时间限制:

由于使用的可能性无穷 在shell环境中,最大 执行时间已设置为 无限制。鉴于申请 为web编写的脚本经常被执行 很快,shell应用程序 要有更长的执行时间

>>


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

PHP绝对不是执行此任务的最佳工具,但它确实有效——我已经编写了好几个类似的脚本,它们运行了几个月都没有问题。通常情况下,您必须小心内存使用。如果您的组织精通,我会n PHP,除此之外,不引入新语言是值得一提的。在理想的世界中,当然,你总是使用最好的工具来完成工作,你会有时间学习新的语言,但这并不总是现实。对于这种脚本,哪种语言是最好的?这取决于你对什么熟悉。就个人而言我喜欢Python,因为它易于学习,但可以让您快速编写可靠的工作代码。而且它易于维护,因为作为语法的空白以及对任何特定任务采用一种方法的理念意味着代码趋于统一。对于任何可能每分钟循环几次或更多的代码,cron都不是那么好。您必须rry关于上一次调用在下一次调用开始之前未完成的问题,等等。对于每小时只运行几次的作业,cron非常好。我已经成功地做到了这一点。您将cron设置为每分钟运行脚本。然后编写脚本,在这一分钟内运行几个周期,并在每个周期结束时检查它自己的运行时间。如果您的脚本的运行时间为50秒或更长,然后它不执行下一个循环并死亡,将由下一个cron运行继续。问题:当脚本(出于某种原因)停止时,您将如何自动重新启动它?