如何在具有参数的命令的后台运行命令

我试图在PHP中执行一个命令在后台运行,以便PHP脚本不必等待脚本完成。 我正在尝试使用这个:

exec('bash -c "exec nohup setsid COMMAND_HERE > /dev/null 2>&1 &"'); 

不幸的是,我的命令需要参数和/dev/null 2>&1 &不工作我相反,它是在我的幻影的系统参数。

 exec('bash -c "exec nohup setsid cd /var/www/html/smartgood/'.$i.' && phantomjs dump2.js '.date('d').' '.date('m').' > /dev/null 2>&1 &"'); 

date('d').' '.date('m') date('d').' '.date('m')是我需要运行脚本的参数。

任何想法如何解决它,或者如果有另一种方式来在PHP中运行该行,而无需等待我的phantomjs脚本完成?

你有两个命令,所以只有第二个被重定向到/ dev / null。 为了简单和可维护,我将所有这些命令移动到一个单独的bash文件并运行。

像这样的东西(语法需要检查):

/path/to/script.sh:

 #!/bin/bash exec nohup setsid cd /var/www/html/smartgood/$1 phantomjs dump2.js $2 $3 

然后运行它:

 exec('bash -c /path/to/script.sh ' . $i .' ' .date('d').' '.date('m') . ' > /dev/null 2>&1 &"'); 

尝试使用我刚刚写的这个整洁的函数。 它也有跨平台的支持,所以将在Linux和Windows上工作

 function execInBackground($cmd) { if (substr(php_uname(), 0, 7) == "Windows"){ pclose(popen("start /B ". $cmd, "r")); } else { exec($cmd . " > /dev/null &"); } } 

只需将您的节点命令传递到execInBackground并观看它的工作:)