【问题标题】:Executing multiple linux commands using && in background from a PHP script在 PHP 脚本的后台使用 && 执行多个 linux 命令
【发布时间】:2014-07-20 03:47:53
【问题描述】:

好的,所以我有一个操作系统 Ubuntu。我有灯。现在我想在后台执行一些命令,这将至少需要 10-15 分钟才能执行。我想从 Web 界面而不是 cli 的 PHP 脚本执行此命令。

一审:

当我这样做时,php脚本可以在后台成功运行命令:

command1 &> /dev/null &

二审:

但是当我这样做时:

command1 &> /dev/null && command2 &

,

然后该命令不会在后台运行,php 脚本会暂停,直到该命令执行。我希望 command2 在 command1 完成后执行,以便我(或我的 php 脚本)可以知道 command1 已被执行。但它应该在后台,否则我的 php 脚本不会按时执行。

当我从命令行执行第二个实例时,它能够在后台运行,但是当我从 php 脚本执行时,它无法在后台运行。

我正在使用 php 的 exec 函数来执行这些命令。

<?php
exec('command1 &> /dev/null && command2 &',$out,$ret);
?>

任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试过使用两个exec 语句,一个接一个?
  • 您可能需要&amp; 而不是&amp;&amp;

标签: php linux


【解决方案1】:

试试这个:

<?php
exec('(command1 && command2) >/dev/null &',$out,$ret);

它所做的是在子shell中启动你的命令,以便command1首先运行,然后command2仅在command1成功完成后运行,然后将所有输出重定向到dev/null并在背景。

如果您想运行command2 而不管command1 的退出代码如何,请使用; 而不是&amp;&amp;

【讨论】:

    【解决方案2】:

    计算机正在执行您指示它执行的操作。 &amp;&amp; list operator 告诉外壳程序仅在第一个命令成功完成时才运行第二个命令。相反,您应该运行两个独立的命令;如果这两个命令之间确实存在依赖关系,那么您可能需要重新考虑您的方法。

    【讨论】:

      最近更新 更多