2016-06-28 23 views
0

我正在爲我的節點項目製作自動化腳本,並且遇到了一些我無法解決的問題。如何在無聲/非寂靜模式下在節點中產生分離命令?

我想使用grunt任務啓動3個detached proccesses:selenium-standalone start進行測試,mongod --dbpath ./mongonode app.js。 我使用類似的代碼爲所有這些

var spawn = require('child_process').spawn, 
command = 'selenium-standalone.cmd', // or "mongod" or "node" 
args = ['start']; // or ["--dbpath", path.join(process.cwd() + "/mongo/")] or ['app.js'] 
var ch = spawn(command, args, { 
       detached: true, 
       env: process.env, 
       stdio: 'ignore' 
      }); 
ch.unref(); 

所有proccesses成功的背景,但具有不同的行爲開始。硒打開新的終端窗口,所以我可以看到它做了什麼,我可以通過雙重ctrl+C關閉它。但是mongod --dbpath ./mongonode app.js默默啓動。他們工作,我可以找到他們在任務管理器(或ps *mongod*)。

所以,我的問題:我如何影響這種行爲?我想統一它,並使用一些外部配置參數來規則。

我在使用Windows 10上的節點。

謝謝。

回答

0

解決方法,我發現:

// This one will close terminal window automatically. 
// all output will be in terminal window 
spawn("cmd", ["/k", "node", options.appFile], { 
        detached: true, 
        stdio: 'inherit' 
       }).unref(); 

// This one will NOT close terminal window automatically after proccess ends his job 
// for some reason `spawn('start', [...])` will failed with ENOENT 
spawn("cmd", ["/c", "start", "cmd", '/k', "node", options.appFilePath], { 
       detached: true, 
       stdio: 'inherit' 
      }).unref(); 

// This is freak one. All output will go to the file. 
// New terminal window will not be opened 
spawn("cmd", ["/c", "start", "cmd", '/k', "node", options.appFilePath, options.logFilePath,"2>&1"], { 
       detached: true, 
       stdio: 'inherit' 
      }).unref(); 

// This one is better than previous. Same result 
var out = fs.openSync(options.logFilePath, 'a'), 
    stdioArgs = ['ignore', out, out]; 
spawn("node", [options.appFilePath], { 
      detached: true, 
      stdio: stdioArgs 
     }).unref(); 

希望,有人會發現它有用。