我需要一些帮助, 无休止的脚本看起来完全一样 – 但我似乎无法停止与暴发户脚本相关的工作。 我正在使用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 。