【问题标题】:GNU Parallel to run from a webpageGNU Parallel 从网页运行
【发布时间】:2013-07-10 04:51:47
【问题描述】:

我正在做一个演示,并使用 GNU Parallel 并行运行我的网络爬虫,以帮助减少总时间。我从一个 php 文件运行它,如下所示:

<?php

   ....
   exec(" parallel -j 8 < commands.txt", $output);
   ....
?>

当我从终端运行这个文件时,它工作正常并且完成了commands.txt 文件中给出的所有抓取工作,但是当我尝试从网页运行它时(调用这个php 文件),@ 987654324@ 给我以下错误:

parallel: Warning: $SHELL not set. Using /bin/sh.
Use of uninitialized value $ENV{"HOME"} in concatenation (.) or string at  /usr/bin/parallel line 943.
Use of uninitialized value $ENV{"HOME"} in concatenation (.) or string at   /usr/bin/parallel line 943.
Use of uninitialized value $ENV{"HOME"} in concatenation (.) or string at /usr/bin/parallel line 2207.
Use of uninitialized value $ENV{"HOME"} in concatenation (.) or string at /usr/bin/parallel line 2207.

有没有人遇到过类似的问题,可以帮我解决这个问题?

提前致谢。

【问题讨论】:

  • 你试过 shell_exec() 吗?
  • 尝试使用shell_exec()
  • 我也尝试过使用“shell_exec”。还是一样的错误。
  • 它现在可以工作了(尽管仍然显示警告)。感谢 Matt Bryant 和 DevZer0 的投入 :)
  • putenv('SHELL=/bin/sh'); 可能会消除警告

标签: php parallel-processing web-crawler gnu-parallel


【解决方案1】:

GNU Parallel 使用 $HOME 和 $SHELL。 $SHELL 默认为 /bin/sh,但 $HOME 没有默认值。所以设置 $HOME:

putenv('HOME=/tmp'); # Or some other place

您应该在 $HOME 中具有写入权限。

如果你也想避免设置 $SHELL 警告:

putenv('SHELL=/bin/sh');

【讨论】: