鍍金池/ 問答/PHP  HTML/ php在執(zhí)行bat腳本時(shí),一直阻塞,如何解決

php在執(zhí)行bat腳本時(shí),一直阻塞,如何解決

我在項(xiàng)目中需要運(yùn)行一個(gè)websocket服務(wù)(nodejs的代碼),為了防止服務(wù)器重啟之后此服務(wù)未啟動,所以在中間件中對此服務(wù)進(jìn)行了監(jiān)控,如果服務(wù)未開啟,則通過bat文件開啟此服務(wù)。但現(xiàn)在遇到一個(gè)問題,就是exec()執(zhí)行bat文件時(shí)會一直在執(zhí)行,導(dǎo)致頁面連接超時(shí)~

中間件代碼:
public function handle($request, Closure $next)

{
    //功能:監(jiān)控laravel-echo-server 是否運(yùn)行,如果沒運(yùn)行就運(yùn)行l(wèi)aravel-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

現(xiàn)象:每當(dāng)走到中間件時(shí),通過資源管理器可以看到服務(wù)已經(jīng)被拉起來了,但是var_dump(1)一直沒有執(zhí)行,所以這個(gè)要怎么解決呢?有沒有大佬指點(diǎn)一下~

PS: 官方手冊上exec()函數(shù)有解釋,"程序使用此函數(shù)啟動,為了能保持在后臺運(yùn)行,此程序必須將輸出重定向到文件或其它輸出流。否則會導(dǎo)致 PHP 掛起,直至程序執(zhí)行結(jié)束。"但是我在bat中已經(jīng)重定向到一個(gè)日志文件了啊。

回答
編輯回答
不歸路
start /b laravel-echo-server start  >websocket_log.txt & 

改成這樣試試,注意后面的 &

2017年9月11日 11:23