节点js Upstart脚本文件读取

我正在研究EC2实例,并将我的节点应用程序项目放在/ var / www /中。 我正在使用upstart脚本启动节点应用程序。 upstart脚本放在/ etc / init /中。 在应用程序中,我正在parsing一个文件,如下所示,以访问configurationvariables:

var _conf = JSON.parse(fs.readFileSync('./config/config.json')); 

当我用命令节点app.js在前台运行应用程序时,它工作正常。 它能够将文件parsing为JSON。 但是当我运行新贵的脚本时会抛出下面的错误。

 fs.js:549 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); ^ Error: ENOENT: no such file or directory, open './config/config.json' at Error (native) at Object.fs.openSync (fs.js:549:18) at Object.fs.readFileSync (fs.js:397:15) at Object.<anonymous> (/var/www/machaao-api/node_modules/machaao-kafka/index.js:3:27) at Module._compile (module.js:435:26) at Object.Module._extensions..js (module.js:442:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:311:12) at Module.require (module.js:366:17) at require (module.js:385:17) [2015-12-09T07:52:05.257Z] (sys) Starting 

下面是我的新贵脚本:

 #!upstart description "API Server" author "Author" start on startup stop on shutdown respawn respawn limit 5 20 script echo "script started..." >> /var/log/project.log echo $$ > /var/run/project-api.pid exec node /var/www/project-api/app.js >> /var/log/project-api.log 2>&1 end script pre-start script echo "Pre-start script started..." echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/project-api.log end script pre-stop script echo "Pre-stop script started..." rm /var/run/project-api.pid echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/project-api.log end script 

有人可以解释是什么问题? 当我知道它在那里时,它说没有这样的文件或目录。 我是一个新手Linux用户。 这是因为一些权限问题?

可能你只需要cd到节点目录并从那里开始:

 exec cd /var/www/project-api && node app.js >> /var/log/project-api.log 2>&1 

您也可以更改应用程序脚本以获取绝对path,因此您不需要cd到目录中:

 var fs = require('fs'); var path = require('path'); var _conf = JSON.parse(fs.readFileSync(path.join(__dirname, 'config/config.json'))); console.log(_conf); 

目前我还不确定节点如何parsing这样的相对path,因此可能在parsingjson之前尝试类似的方法

 var path = require('path'); console.log(path.resolve('./config/config.json')); 

看看它是否打印你想要的绝对path。