【问题标题】:Node js Upstart script file readNode js Upstart 脚本文件读取
【发布时间】:2016-03-14 10:03:08
【问题描述】:

我正在处理 EC2 实例,我已将我的节点应用程序项目放在 /var/www/ 中。我正在使用 upstart 脚本来启动节点应用程序。 upstart 脚本放在 /etc/init/ 中。在应用程序中,我正在解析如下文件以访问配置变量:

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

当我使用命令 node app.js 在前台运行应用程序时,它工作正常。它能够将文件解析为 JSON。但是当我运行 upstart 脚本时,会抛出以下错误。

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用户。这是因为一些权限问题吗?

【问题讨论】:

  • 你应该发布暴发户脚本。
  • 我在编辑中添加了暴发户脚本

标签: node.js upstart fs


【解决方案1】:

您可能只需要cd 进入节点目录并从那里启动它:

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

您还可以更改应用脚本以获取绝对路径,这样您就无需 cd 进入目录:

var fs = require('fs');
var path = require('path');

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

console.log(_conf);

【讨论】:

  • 代码 sn-p var path = require('path'); var _conf = JSON.parse(fs.readFileSync(path.join(__dirname, 'config/config.json'))); 帮助我解决了我的问题
【解决方案2】:

目前我不确定节点是如何解析这样一个相对路径的,所以在解析 json 之前,不妨试试这样的方法

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

看看它是否打印出你希望的绝对路径。

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 2016-06-23
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2022-01-26
    相关资源
    最近更新 更多