【问题标题】:Disadvantages of using exec command in php script在 php 脚本中使用 exec 命令的缺点
【发布时间】:2013-09-06 07:31:15
【问题描述】:

在 PHP 中,

 I need to execute background tasks. So I have three choices to run script from 
 following commands:

 1)exec
 2)shell_exec
 3)passthru

 I randomly decided to use exec command in PHP.
 Because All of these have similar characteristics.

现在我想知道有没有disadvantage of exec() command 会在后台运行?其实我不太了解这个命令。

它是否使线程与主线程分开?如果yes then,有没有办法清理或挂起这个后台线程?或者it simply forget it after firing the command

我问这个是因为在我的代码中需要run this script very fast one after one within moments那么它会产生任何服务器负载吗?

编辑: 我正在使用这样的 exec 命令:

exec("/usr/bin/php /path/to/Notification.php >> /path/to/log_file.log 2>&1 &");

请指导我。任何帮助将不胜感激。

【问题讨论】:

    标签: php background exec suspend server-load


    【解决方案1】:

    exec() 是否会等待命令完成,这完全取决于您拨打的电话类型。当然,在服务器上运行大量后台线程可能会产生大量 CPU 负载。

    现在,通常您使用exec() 运行的任何命令都不会在后台运行,这意味着您的 PHP 脚本将等待命令完成执行。 为了让您的命令在后台运行,您必须重定向其输出流并通过将其添加到您的命令中明确告诉它在后台运行:

    > /dev/null 2>/dev/null &
    

    当然,这样做的缺点是您永远无法从命令中将任何结果返回给 PHP。这将是火灾和忘记。

    【讨论】:

    • 好的。我只是这样使用。请查看我编辑的问题。唯一的区别是我使用的是 /path/to/log_file.log 2>&1 & 而不是 /dev/null 2 >/开发/空&。如果我将日志打印到 log_file 中需要时间吗?谢谢。
    • 为什么要使用 exec() 从 PHP 运行 PHP 脚本?为什么不直接包含文件?无论如何,将输出重定向到文件也会有所帮助。
    • 因为,我通过在 Notification.php 中包含另一个文件来发送 APNS 推送通知
    • 你能告诉我如何使用 "> /dev/null 2>/dev/null &" 和 exec("/usr/bin/php /path/to/Notification.php >> /path/to/log_file.log 2>&1 &") 这样就不会打印日志了?
    • 我回答了你的问题,请接受或否决我的回答,但在 StackOverflow 上问很多后续问题不太礼貌。
    【解决方案2】:

    对于您将标准输出和错误输出都重定向到文件,我认为无论您在这里使用 exec 还是 shell_exec 或 passthru 都没有任何问题。

    据我所知,这些是它们的主要区别

    shell_exec():返回整个标准输出(它不会在终端上显示任何内容)

    exec():与 shel_exec() 相同,但它只是返回标准输出的最后一行

    passthru():这就像调用命令一样,它会在终端上显示输出而不是返回它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      相关资源
      最近更新 更多