无法获取 node.js 程序的 upstart 脚本以在启动时启动

无法获取 node.js 程序的 upstart 脚本以在启动时启动

我为我的 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 脚本启动一个实际上不存在的脚本而导致的。结果发现我忘记提交并推送该脚本了。

相关内容