因此,我基于以下脚本编写了一个看似基本的 node.js 服务器 upstart 脚本:本文,并且运行正常,启动服务器并在预期端口上运行。当我尝试终止它时,问题就出现了。
我尝试了一些命令,例如stop socketserver
和initctl stop socketserver
(功能等效)或kill
,它们都执行两件事:成功结束该进程,然后在不同的 pid 下重新启动它。
我想要的只是当我告诉它时这个过程就结束,但是当它不是有效的退出代码时重新启动;我做错了什么?
description "node.js Socket Server"
author "moberemk"
start on started
stop on shutdown
# Automatically Respawn
respawn
respawn limit 10 5
script
# Not sure why $HOME is needed, but we found that it is:
export HOME="/root"
export SOCKETSERVER_PORT=5000
exec sudo -u root /usr/bin/nodejs /vagrant/webroot/socketserver/app.js
end script
(我也知道该脚本可能会泄露这一点,但我在使用 Ubuntu 14.04 的 Vagrant 框上运行它)
答案1
看起来好像你正在指示 upstart 做一些相当特别的事情:
start on started
这行没有触发语法错误。但通常你会指定start
这样的节:
start on started some-other-service
假设你希望你的 nodejs 服务在启动时运行(并且假设它需要互联网连接)也许你想要执行以下操作:
start on (local-filesystems and net-device-up IFACE!=lo)
编辑
start on started
经过进一步调查,我确定此节实际上导致 upstart 在另一个服务启动完成后运行您的服务,这可以解释为什么您的进程变得无法终止。
答案2
注释掉或删除重生行