2017-05-23 117 views
0

所以要開始;我試圖通過PHP啓動一個節點應用程序。我創建了一個腳本,可以檢查節點應用程序是否正在運行,關閉它並啓動它。但是我在使用PHP的屏幕時遇到了一些麻煩。通過PHP在屏幕會話內啓動節點的問題

現在,在我繼續之前,我不應該這樣做的意見不會起作用,我需要通過PHP啓動它,因爲它與網站一起工作,並且我希望我們的客戶能夠更改設置,這將重新啓動應用程序(除非您有其他想法)。

我目前使用的命令:

screen -dmS NODEJS node main.js 121016 

現在,我可以啓動節點,並得到輸出(只要我添加process.exit某處所以PHP /節點不會永遠運行)。我已經在正確的目錄還,我使用這個代碼來運行它:

$out = shell_exec('screen -dmS NODEJS node main.js 121016'); 
var_dump($out); 

但它不是創建畫面會話。我也曾嘗試:

$proc = proc_open('screen -dmS NODEJS node main.js 121016', $this->pipe_spec, $pipes); 

我還試圖用exec和反引號,但我相當肯定的反引號是一樣的了shell_exec?

無論如何,我完全失去了,我不知道我還能做什麼。我不希望節點持續運行,這就是爲什麼當我單擊管理器中的保存(在php中)時它會啓動它,然後在它完成任務時關閉/停止自身。

任何幫助都會有很長的路要走,我花了好幾個小時試圖解決它,但是我沒有得到任何地方......謝謝。

+0

爲什麼你甚至試圖使用屏幕? –

+0

只需使用'exec('node main.js &');' – Philipp

+0

@JonStirling我正在使用屏幕,以便在出現任何問題時連接到程序,因爲它與網站一起運行。如果它們允許'shell_exec,那麼它允許我發送它的命令也stdin?因爲我需要發送命令也! –

回答

1

對此感興趣的任何人的更新。

該問題是由於我沒有正確管理管道並且未發送stdOut管道而引起的。問題主要發生在我試圖刪除屏幕時,因爲它沒有給我正確的PID。

什麼我到底使用的更新:

node main.js > /dev/null 2> logs/app-error.log & echo $! 

最後一個「2>」我沒有正確管理。