我试图在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
并观看它的工作:)