我正在尝试在PHP中执行一个命令以在后台运行,这样PHP脚本就不必等待脚本完成了。我想用这个:
exec('bash -c "exec nohup setsid COMMAND_HERE > /dev/null 2>&1 &"');
不幸的是,我的命令接受了参数而且/dev/null 2>&1 &
不起作用我猜它反应在我的幻像的系统args中。
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')
是我需要使用。
知道如何解决它或者是否有另一种方法在PHP中运行该行而无需等待我的phantomjs脚本完成?
答案 0 :(得分:2)
您有两个命令,因此只有第二个命令被重定向到/ dev / null。为了保持简单和可维护,我将所有这些命令移动到一个单独的bash文件并运行它。
像这样的东西(需要检查语法):
<强> /path/to/script.sh:强>
LoginRequest request = new LoginRequest<>("aaaa@email.com", "myDummyPassword", LoginResponseModel.class, new Response.Listener<LoginResponseModel>() {
@Override
public void onResponse(LoginResponseModel loginResponseModel) {
//Success
}
}, new BaseError(getApplicationContext()) {
@Override
public void onError(ErrorResponse response) {
//Erros
}
});
然后用:
运行它#!/bin/bash
exec nohup setsid cd /var/www/html/smartgood/$1
phantomjs dump2.js $2 $3
答案 1 :(得分:0)
尝试使用我刚才写的这个简洁的功能。它还具有跨平台支持,因此可以在linux和windows上运行
function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}
只需将节点命令传递给execInBackground
并观察它是否有效:)