我想用PHP脚本作为后台进程运行我的服务器,但它还是挂了PHP脚本。我是这样叫的。
$exec_result = exec('./myapp option1 option2 &> /dev/null &');
我试了一下 PHP在exec()时挂起的bash脚本。 比如添加 "set -m && "或 "shopt -u checkjobs &&",但这并没有帮助。我还试着在exec()中调用我的C++实用程序,它可以在后台运行命令(基本上只是用"& "调用std::system),但也没有用。使用 "nohup "也没有任何改变。另外,问题不在我的服务器上,因为当我调用 "sleep "命令时,同样的事情也会发生。
从bash中调用完全相同的命令,也会像预期的那样在后台运行进程。老实说,我很困惑和沮丧。我到底做错了什么?也许PHP需要某种权限来运行后台任务?我是个Linux新手。
我是在 Debian 10 和 PHP 7.3 上做的,如果这很重要的话。
我已经设法解决了这个问题,但我不知道为什么新的解决方案可行,而旧的解决方案却不行。也许这和exec() build-it解析器有关?这两行代码在bash中的工作原理是一样的,所以我将此归咎于PHP。
所以,我把
$exec_result = exec('./myapp option1 option2 &> /dev/null &');
与
$exec_result = exec('./myapp option1 option2 > /dev/null 2>&1 &');
就这样做了。我来来回回检查了好多次,第二条线一直能用,而第一条线每次都失败。