2014-02-24 21 views
2

我有下面的代碼,用於產生和分離一個子進程,這只是另一個node.js腳本在同一個目錄。下面是我運行的確切代碼:Node.js - 產生的進程正在產生錯誤「execvp():沒有這樣的文件或目錄」

var fs = require('fs'); 
var child = require('child_process'); 

var out = fs.openSync('/tmp/daemon.log', 'a'); 
var options = { 
    cwd: process.cwd(), 
    env: process.env, 
    detached: true, 
    stdio: ['ignore', out, process.stderr] 
}; 

child.spawn('/usr/local/bin/node ./daemon.js', [], options).unref(); 

所有daemon.js做現在的問題是兩秒鐘的超時後退出:

setTimeout(function() { 
    console.log('done'); 
}, 2000); 

如果我從它按預期工作的終端運行daemon.js直接。如果我運行相同的命令被傳遞到child.spawn()它按預期工作。然而,當我運行該腳本,它生成此錯誤:

execvp(): No such file or directory 

它似乎沒有具體的Node.js和我在遇到麻煩的工作出了什麼問題。有人有任何建議嗎?

僅供參考,在OS X 10.8.5服務器上使用Homebrew安裝節點,路徑爲/usr/local/Cellar/node/0.10.25/bin/node,符號鏈接到/usr/local/bin/node

編輯

代碼現在的作品完美,與它沒有無所謂其工作目錄的主要腳本是從運行添加avdantage!

var fs = require('fs'); 
var child = require('child_process'); 

var out = fs.openSync('/tmp/daemon.log', 'a'); 
var options = { 
    cwd: process.cwd(), 
    env: process.env, 
    detached: true, 
    stdio: ['ignore', out, process.stderr] 
}; 

child.spawn('/usr/local/bin/node', [__dirname + '/daemon.js'], options).unref(); 
+0

我試着定義腳本的文件名爲: 'var filename = process.cwd()+'/daemon.js';' 並註銷以確保它是正確的,但仍然是相同的錯誤。 – Adam

回答

4

嘗試改變

child.spawn('/usr/local/bin/node ./daemon.js', [], options).unref(); 

要:

child.spawn('/usr/local/bin/node', ['./daemon.js'], options).unref(); 

或者:

child.spawn('node', ['daemon.js'], options).unref(); 
+0

完美!乾杯朋友。 – Adam

1

而是嘗試

__dirname+'/daemon.js' 
+0

user2837037的答案解決了這個問題,但這幫助我產生了子進程,而不管父腳本從哪裏運行。乾杯! – Adam

相關問題