php在执行bat脚本时,一直阻塞,如何解决

早起写代码
  • 232

我在项目中需要运行一个websocket服务(nodejs的代码),为了防止服务器重启之后此服务未启动,所以在中间件中对此服务进行了监控,如果服务未开启,则通过bat文件开启此服务。但现在遇到一个问题,就是exec()执行bat文件时会一直在执行,导致页面连接超时~

中间件代码:
public function handle($request, Closure $next)

{
    //功能:监控laravel-echo-server 是否运行,如果没运行就运行laravel-echo.bat脚本
    $cmd = 'tasklist|find /c "node.exe"';
    $ret = exec("$cmd");
    if($ret == 0){
        $path = base_path().'\laravel-echo.bat';
        exec($path,$out,$stu);
        var_dump(1);
    }
    return $next($request);
}

laravel-echo.bat 代码:

    cd ..
    start /b laravel-echo-server start  >websocket_log.txt

现象:每当走到中间件时,通过资源管理器可以看到服务已经被拉起来了,但是var_dump(1)一直没有执行,所以这个要怎么解决呢?有没有大佬指点一下~

PS: 官方手册上exec()函数有解释,"程序使用此函数启动,为了能保持在后台运行,此程序必须将输出重定向到文件或其它输出流。否则会导致 PHP 挂起,直至程序执行结束。"但是我在bat中已经重定向到一个日志文件了啊。

回复
阅读 2.5k
1 个回答
start /b laravel-echo-server start  >websocket_log.txt & 

改成这样试试,注意后面的 &

宣传栏