2014-07-20 48 views
0

好吧,我有一个操作系统Ubuntu。我有lampp。现在我想在后台执行一些命令,这需要至少10-15分钟才能执行。我想从web界面的cli脚本执行这个命令。从PHP脚本中使用&&在后台执行多个linux命令

一审:

当我做到这一点,PHP脚本能够成功地在后台运行命令:

command1 &> /dev/null & 

二审:

但是,当我这样做:

command1 &> /dev/null && command2 & 

然后该命令不会在后台运行,php脚本会暂停,直到执行此命令。我想在command1完成后执行command2,这样我(或者我的php脚本)就可以知道command1已经被执行了。但它应该在后台,否则我的PHP脚本不能按时执行。

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

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

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

任何帮助,将不胜感激。

+0

您是否尝试过使用两个'exec'语句,一个接一个? – Machavity

+0

你可能需要'&'而不是'&&'。 –

回答

1

试试这个:

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

它在做什么将推出在子shell中的命令,以便command1运行,然后再command2只运行command1成功完成,那么所有的输出重定向到dev/null并运行后整在后台的东西。

如果要运行command2而不考虑command1的退出代码,请使用;而不是&&

0

电脑正在做你指示它做的事情。如果第一个命令成功完成,&& list operator会通知shell仅运行第二个命令。相反,你应该运行两个独立的命令;如果两个命令之间确实存在依赖关系,那么您可能需要重新考虑您的方法。