我正在尝试设置 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
。