2011-12-23 127 views
14

我有一個通過node.js運行的JS文件,所以通常我打開一個終端窗口並輸入類似node myfile.js之類的東西,它運行並整天運行;樂趣。觸發節點js文件

然後,當我想重新啓動它時,我碰到了control-c,然後它就退出了。然後我可以再次運行該命令。

現在我想要做的是能夠通過網頁做到這一點,以便我的用戶可以運行特定的JS文件,並且能夠「重啓」它們。

這個所以兩個問題:

  1. 是否有可能,如果是這樣我怎麼開始?
  2. 它是否安全?如果不是,它可以安全嗎?

基於swatkins響應

我想這並沒有什麼

$output = exec("node -v"); 
echo $output; 

然後我想我的本地計算機上,它好工作怎麼辦?

也是我仍不能確定安全性和停止正在運行的腳本

+0

不,應該將'$ output'作爲exec函數的第二個參數傳遞:'exec(「node -v」,$ output); print_r($ output);' – swatkins 2011-12-23 22:07:49

回答

16

的能力,假設你在基於Unix的操作系統:

您可以通過EXEC運行shell命令()功能:

// in php file 
// to start the script 
exec("node myscript.js &", $output); 

$output成爲輸出的每一行的數組,所以你可以看到進程id是什麼。然後你將使用該進程ID來終止腳本:

exec("kill " . $processid); 
+0

,然後我將如何停止該腳本?這是安全的運行?我怎麼知道它的運行? – mcgrailm 2011-12-23 21:38:37

+0

更新了我的答案 - 您需要獲取進程ID,所以通過在後臺運行'myscript.js'(通過追加'&'到命令),您將在輸出數組中獲得進程id。你可能需要做一些字符串操作來獲得實際的id,但是你只是用它來殺死這個進程。 – swatkins 2011-12-23 21:54:31

+0

這個特定的運行腳本,但不給我任何uoutput,直到我殺了進程,然後它給了我寫入到console.log() – mcgrailm 2011-12-23 23:42:58

2

我會避免與shell的任何直接交互。或許,這將是最安全的,解決這個問題是這樣的:

  • 實現一些整體的「服務」 -script,即推出用戶節點的應用程序,並保持它運行(類似於https://github.com/isaacs/node-supervisor
  • 使它,因此它會自動重新啓動相關文件或數據庫條目的更改
  • 用戶觸發重新引導時,將標誌(timestamp?)添加到由reboot-script監視的數據庫條目或文件。然後它將重新啓動node.js-app /腳本。
+3

爲什麼你不會有shell交互?接受的答案有什麼問題? – 2012-10-27 20:50:33