4

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

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

基本上,

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

该脚本将执行 shell_exec("/shell_script.sh"); 处理最多可能需要 2 个小时。这会触发最大执行时间或类似情况吗?

这是“可以”做的吗?如果没有,有什么替代方案?

4

5 回答 5

6

您需要确保将脚本的最大执行时间设置为零,这样就不会施加时间限制。您可以使用 PHP 文件执行此操作,

set_time_limit(0);

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

但是,无需设置变量并检查它以永远循环,

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

你可以简单地做while(true)or while(1)

于 2010-06-04T19:28:21.950 回答
5

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

于 2010-06-04T19:25:54.063 回答
3

只是一个旁注,因为其他人建议通过以下方式关闭时间限制set_time_limit

由于在 shell 环境中使用 PHP 的可能性无限,因此最长执行时间已设置为无限制。为 Web 编写的应用程序通常执行得非常快,而 shell 应用程序的执行时间往往要长得多。

从命令行使用 PHP >>与其他 SAPI的差异

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

于 2010-06-04T19:54:51.993 回答
1

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

于 2010-06-04T19:35:17.850 回答
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:);

编辑 忽略我的帖子使用让 PHP 脚本循环永远从队列系统执行计算作业

于 2010-06-04T19:28:50.117 回答