我为我的 node.js 程序制作了一个相当简单的启动脚本,该脚本应该在启动时运行:
start on startup
stop on shutdown
script
exec sudo -u max WEBSITES_DIR=/home/max/websites/ /usr/local/bin/node /home/max/websites/server.js 2>&1 >> /var/log/node.log
end script
如果我使用:
sudo start my-program
它可以工作,但是当我重新启动机器时,我收到错误消息:
init: my-program main process (325) terminated with status 2
有人知道如何调试这个吗?
答案1
此startup
事件是 Upstart 启动过程中发出的第一个事件。各种情况尚未发生 - 根文件系统仍将以只读方式挂载,网络尚未初始化,等等。
我怀疑该作业快速退出是因为其所有依赖项(显式或隐式)尚未初始化。我会将启动条件更改为类似
start on filesystem and started networking
至少到那时你就能写入你的日志文件了。
附注:您似乎反转了输出重定向参数 - 您实际上的意思是>> /var/log/node.log 2>&1
。使用2>&1
意味着“获取当前 fd 1 的内容,并使 fd 2 成为相同内容”,但您尚未更改 stdout 的内容。
答案2
海马,
在 Ubuntu 服务器上启动 node.js
more /etc/init/noded.conf
Ubuntu upstart 文件位于/etc/init/noded.conf
:
description "noded.conf"
author "ntbinh"
start on runlevel [2345]
stop on runlevel [06]
respawn
script
su - ubuntu -c "NODE_ENV=test exec sudo /etc/init.d/noded start"
end script
您已经/etc/init.d/noded
。您可以编辑/etc/init/noded.conf
==> 启动引导:
# Ubuntu upstart file at `/etc/init/noded.conf`
description "noded.conf"
author "ntbinh"
respawn
start on runlevel [2345]
stop on runlevel [06]
script
su - ubuntu -c "NODE_ENV=test exec sudo /usr/bin/nohup /usr/bin/node /home/ubuntu/server.js" >> /home/ubuntu/log.log
end script
答案3
在我的例子中,类似的错误是由于尝试从我的 upstart 脚本启动一个实际上不存在的脚本而导致的。结果发现我忘记提交并推送该脚本了。