试图通过厨师启动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资源中包含一个示例初始化脚本 ,您可以使用或调整您的需求。