用init脚本启动进程的奇怪行为

使用init脚本启动进程时,我看到一些奇怪的行为。 我很可能是在做一些愚蠢的事情,但也许有人可以让我知道什么可能会导致这种行为:

[背景:这个过程是mongodb作为configuration服务器(2.4)运行的monogod,我在Debian 6上运行。该进程在用户'mongodb'下运行,我通过SSH以非root用户身份发出命令]

  • 当服务器启动时,进程似乎正常启动(我可以通过ps -ef看到它,并且生成了一个mongodb.pid文件)。
  • 如果我试图通过sudo /etc/init.d/mongodb stop来停止进程,那么怪异开始了:我得到了mongodb apparently not running 。 (虽然过程和PID仍然在那里)。
  • 当然,如果我试图sudo /etc/init.d/mongodb start现在sudo /etc/init.d/mongodb start我得到'失败',并在日志中有一个关于已经使用的端口的错误,这是预期的,因为实际上已经有一个实例正在运行。
  • 如果我杀了-15的进程,然后尝试sudo /etc/init.d/mongodb start我得到更多的怪异:在控制台,我得到Starting database: mongodb failed! (没有更多的信息)。 但是…现在进程正在运行,并且在日志中我没有看到任何错误,只是看起来进程正常启动。
  • 如果我试图用sudo /etc/init.d/mongodb stop来停止这个过程,我得到的是mongodb apparently not running

有问题的脚本在这里 。

有任何想法吗? 谢谢!

编辑:如果是mongo相关的东西,这里是我的configuration服务器的mongodb.conf:

 configsvr=true dbpath=/data/configdb logpath=/var/log/mongodb/mongodb.log logappend=true port = 28222 bind_ip = a_public_ip,127.0.0.1,a_private_ip auth = true keyFile = /srv/mongodb/keyfile nohttpinterface = true fork = true 

另外:我看到Starting database: mongodb failed! 在启animation面中(但启动后仍然有一个看似正常运行的进程)。

如果您在该服务器上运行了多个实例,或者其他可能会在此处添加其他值的其他实例:

 PIDFILE=/var/run/$NAME.pid 

这会导致你在这里看到的问题,它将寻找与该文件中的ID进程,以确定是否mongod和closures它停止什么PID。

您还应该查看该文件的权限,以确保该进程可以访问并在启动时进行更新。

基本上,我们需要为每个初始化脚本使用不同的$ NAME值来避免冲突,并确保正确的PID值正在进入该文件,以便服务按预期工作。

如果一切看起来都不错,那么我猜测你遇到了这里描述的问题:

https://jira.mongodb.org/browse/SERVER-7254

numactl被调用(因为它应该在安装时)似乎会导致不正确的PID被写入PID文件。 我们正在寻找解决这个问题的反馈,所以如果你可以添加你的经验(和你是否有numactl安装),将不胜感激。