Ubuntu Upstart作业 – “停止”是不能识别的命令

我需要一些帮助, 无休止的脚本看起来完全一样 – 但我似乎无法停止与暴发户脚本相关的工作。 我正在使用EC2上的任何最新的Ubuntu Elestic AMI,并且它从微型到大型实例发生。

首先,我在/etc/init/node-monitor.conf提交一个简单的configuration来启动一个进程:

 description "node-monitor" start on (local-filesystems and net-device-up IFACE=eth0) stop on shutdown exec sudo -u root sh -c "cd /home/ubuntu/node-monitor/run && /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 &" 

这工作开始:

 sudo start node-monitor node-monitor start/running, process 1580 

但不停:

 sudo stop node-monitor stop: Unknown instance: 

然后,我尝试了一些更复杂的,基于另一个node.js项目:

 description "node-monitor" start on (local-filesystems and net-device-up IFACE=eth0) stop on shutdown script echo $$ > /var/run/node-monitor.pid exec sudo -u root sh -c "cd /home/ubuntu/node-monitor/run && /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 &" end script pre-stop script rm /var/run/node-monitor.pid end script 

但是这也不起作用。 萨姆希尔,我做错了什么?

所以首先,新贵运行所有的工作,所以你不需要sudo,摆脱这一点。

其次,看起来您的受监控程序正在退出,因此出现“未知实例”错误。 你应该在/ var / log / syslog中得到一些信息,告诉你这个进程已经结束了。 你可以添加“respawn”这个词,新贵会试着重新开始,但如果它继续快速退出,暴发户最终会放弃。

你用&结束你的行,这意味着“在后台运行”。 鉴于此,新贵会看到你的shell退出(因为作业控制在非交互式shell中不活动,并且将有效地守护任何作业)。 如果你想让这个进程继续运行,并且能够杀死它,那就放下&。

此外,你的开始是太明确了,你的停止是基于一个不存在的事件。 你可以从runlevel [2345]开始,然后在runlevel [^ 2345]上停下来,这样可以帮助你在Ubuntu发展后的版本中更好地工作。 从Ubuntu 11.10开始,这也意味着它将在所有networking接口启动后启动,而不仅仅是eth0。

更有趣的是,你可以使用'chdir'节,所以你不必使用shell。

所以原来的工作最好写成:

 start on runlevel [2345] stop on runlevel [^2345] respawn chdir /home/ubuntu/node-monitor/run exec /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 

对于红利点,当Ubuntu 12.04发布时,您可以使用新的“控制台日志”function,并取出>> /var/log/node-monitor.log,尽pipe它会写入/ var / log / upstart / node -monitor.log。

最后,没有实际的“alestic”AMI了。 埃里克哈蒙德保持与https://cloud-images.ubuntu.com上列出的相同的AMI ID的表格。比较http://alestic.com到http://cloud-images.ubuntu.com/query/例如lucid / server / released.current.txt 。