试图通过厨师启动statsD
我试图启动在Ubuntu的statsD,但我遇到了问题。
如果我开始它,它的工作,但阻止厨师继续,但它的工作,并显示在石墨。
但是,如果我像这样启动它(或使用其他方法在后台启动它):
(/usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js) &
它不阻止厨师,但没有石墨显示,但我知道它仍然运行,因为
ps aux | grep stat
将该命令显示为正在运行(不包括grep命令)。
我试图用forever.js来做,但是npm只是报告failed to fetch from registry: forever
编辑:
好吧,我设法让它开始使用nohup /usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js
这开始statsD(好),它不会阻止厨师(也是好的),但现在拒绝停止运行,当我尝试sudo killall -r stat
事后看来,这是因为nohup阻止它接收到杀手信号。
所以问题变成了如何使用nohup(或类似的东西)在后台运行它,但仍然能够停止statsD,以便它可以重新启动(任何潜在的configuration变化)。
编辑:
好的,通过将启动命令更改为: nohup /usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js >> /var/log/statsd.log 2>&1& \n echo $! /opt/statsd/statds.pid
nohup /usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js >> /var/log/statsd.log 2>&1& \n echo $! /opt/statsd/statds.pid
我能够存储该pid,然后使用
kill -9 `/opt/statsd/statsd.pid`
我能够杀死进程,但它仍然留下rcp.statd -L
运行,它有一个单独的PID
好吧,我设法创build了一个bash命令,它将查找和杀死任何包含stat
这个单词的进程; 这对我来说工作正常,因为只有statd相关的进程已经stat
了它。
因此,启动statD的命令是: nohup /usr/bin/node /opt/statsd/stats.js /opt/statsd/localConfig.js >> /var/log/statsd.log 2>&1&
有点啰嗦,但我使用绝对path。
要停止的命令是: ps aux | awk '/stat/ {print $2}' | xargs kill -9
ps aux | awk '/stat/ {print $2}' | xargs kill -9
很简单,甚至更好,我不需要做整个“存储在一个txt文件中的PID”来杀死statsd,当我需要重新启动。
最好的办法是让Chef安装一个init脚本,让你的init守护进程处理所有的statsd守护进程pipe理。 这样你可以使用Chef的service
资源来pipe理实例。
StatsD在Debian资源中包含一个示例初始化脚本 ,您可以使用或调整您的需求。