[英]How to run a command in background for a command that have args
我正在尝试在 PHP 中执行一个命令以在后台运行,以便 PHP 脚本不必等待脚本完成。 我正在尝试使用这个:
exec('bash -c "exec nohup setsid COMMAND_HERE > /dev/null 2>&1 &"');
不幸的是,我的命令需要参数并且/dev/null 2>&1 &
不起作用我猜它会进入我的 phantomjs 的系统参数。
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
并观察它的工作:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.