Upstart 和 Node js:找不到模块

Upstart 和 Node js:找不到模块

我正在尝试设置 upstart 以与我的 Node js 和 Socket.io 服务器一起运行。

/etc/init/quizens.conf

env NODE_BIN=/usr/bin/node
env APP_DIR=/root/quizens
env SCRIPT_FILE="quizens.js"
env LOG_FILE=/root/quizens.log
env RUN_AS="root"

start on filesystem
stop on shutdown

respawn
respawn limit 1 10

script
    touch $LOG_FILE
    chown $RUN_AS:$RUN_AS $LOG_FILE
    chdir $APP_DIR
    exec sudo -u $RUN_AS sh -c "$NODE_BIN $SCRIPT_FILE >> $LOG_FILE 2>&1"
end script

当我start quizens在日志文件中运行时,我得到Cannot find module fb....了,如果我只是从命令行启动服务器,它就可以工作。模块是用-g安装的,它们位于/usr/lib/node_modules

在我的本地机器上它运行良好,但我找不到问题,但把它放在 softlayer 实例上时却不行。

区别在于本地机器 Node 安装在 /usr/local/bin/node 中,而不是 /usr/bin/node 中。这是问题所在吗?

编辑:昨天我为该实例添加了另一个 IP。我不知道这是否与 upstart 有关...

答案1

尝试删除 sudo,它可能会弄乱您的工作目录。脚本部分已以 root 身份运行。执行行可能看起来像exec $NODE_BIN $SCRIPT_FILE >> $LOG_FILE 2>&1。您还可以删除带有touch和 的行chown

答案2

简单的修复,只需创建一个 simlink:

sudo ln -s /usr/bin/nodejs /usr/bin/node

来源

相关内容