首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为cron作业超时问题运行php脚本?

作为cron作业超时问题运行php脚本?
EN

Stack Overflow用户
提问于 2012-11-13 06:07:42
回答 3查看 32.2K关注 0票数 17

我正在编写一个php脚本,做一些后端的东西,需要每8小时左右运行一次。脚本需要一段时间才能执行。更糟糕的是,我在浏览器上试了试,在脚本终止之前,服务器的连接就被重置了。我的问题是-如果我直接运行它,即。php -a file.php作为cron作业,在执行时是否有任何内部时间限制?此脚本可能需要2-5分钟才能完成,并且无法中断。我以前从来没有这样做过,所以我不确定php在运行繁重的脚本时是否有怪癖。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-13 06:34:32

如前所述,CLI脚本在默认情况下没有时间限制。

但我也想提一下您的cron工作方法的一个替代方案:

您可以从can服务器控制下的PHP脚本派生CLI PHP脚本。我已经做过很多次了。如果您有一个执行时间较长的脚本,而该脚本必须由网站用户操作触发(例如,构建一个非常大的归档文件,并在文件完成时通过电子邮件发送下载链接),则此功能尤其有用。我通常使用popen()函数从the服务器PHP脚本派生CLI脚本。这样就可以很好地将参数传输到新的脚本实例,如下所示:

代码语言:javascript
复制
$bgproc = popen('php "/my/path/my-bckgrnd-proc.php"', 'w');
if($bgproc===false){
  die('Could not open bgrnd process');
}else{
  // send params through stdin pipe to bgrnd process:
  $p1 = serialize($param1);
  $p2 = serialize($param2);
  $p3 = serialize($param3);
  fwrite($bgproc, $p1 . "\n" . $p2 . "\n" . $p3 . "\n");
  pclose($bgproc);
}

在CLI脚本中,您将收到如下参数...

代码语言:javascript
复制
$fp = fopen('php://stdin', 'r');
$param1 = unserialize(fgets($fp));
$param2 = unserialize(fgets($fp));
$param3 = unserialize(fgets($fp));
fclose($fp);

...and可以在with服务器的控制下用它们做任何需要很长时间的事情。

此技术在*nix和Windows环境中同样有效。

票数 30
EN

Stack Overflow用户

发布于 2012-11-13 06:15:04

不,当从命令行执行php时,php本身没有时间限制。

但也可以有其他的超时,比如连接到mysql。因此,如果您的代码中有mysql连接,请确保它处于活动状态,或者将mysql超时设置为足以运行您的代码的值。另一件事:我看到一些虚拟主机提供商在几分钟内就终止了php应用的运行。因此,请确保您的提供商不会这样做。

票数 5
EN

Stack Overflow用户

发布于 2012-11-13 06:16:27

默认情况下,PHP脚本在30秒后超时,这可以通过编辑PHP.ini或在脚本顶部添加以下内容来覆盖。

代码语言:javascript
复制
set_time_limit(0);

这将为您的脚本设置无限的执行时间,也就是说,它永远不会结束,除非脚本完成执行,或者服务器宕机,或者文件被删除,或者出现任何致命错误。

另外,

您可以将其添加到您的脚本中,并在浏览器中打开它以启动脚本,它将运行,就像您在浏览器中打开它并保持浏览器打开一样。

代码语言:javascript
复制
ignore_user_abort();

它只是在后台运行脚本。这两个都会对你有用。

ADD :从命令行Cli运行脚本时,默认超时为0。(无超时)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13352388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档