使用start-stop-daemon时无法多次启动mongodb?

问题描述:

我一直在同一台服务器上启动多个mongod进程来测试复制数据库(因为使用多个服务更昂贵,而我现在只是测试)。使用start-stop-daemon时无法多次启动mongodb?

但是,因为我已经更新到蒙哥版本V2.0.5,我发现了以下时,我尝试再次启动mongod的(另一个端口,与其他数据库文件夹等):

mongod already running

这是为什么呢?有没有可以跳过这张支票的标志?

更新:

sudo start-stop-daemon --start -c mainuser --exec /usr/local/bin/mongod -- --journal --nohttpinterface --dbpath /home/mainuser/data/db-secondary --logpath /home/mainuser/data/logs/mongodb-secondary.log --logappend --replSet appname --port 30001

当我运行它像这样它不会发生:由于某种原因,当我运行mongod像这样这只是发生

sudo /usr/local/bin/mongod --journal --nohttpinterface --dbpath /home/mainuser/data/db-secondary --logpath /home/mainuser/data/logs/mongodb-secondary.log --logappend --replSet appname --port 30001

不幸的是我必须使用start-stop-daemon用于Ubuntu 10.04 LTS的新贵脚本。为什么会导致这个问题?

在阅读start-stop-daemon的联机帮助页之后,很明显它故意不尝试再次启动该过程,因为它认为它是相同的“服务”。但是,我只使用start-stop-daemon,以便我可以作为不同的用户与Upstart运行。是否有可能绕过支票,或以不同的方式在暴发户中作为非sudo用户运行?

事实证明,这是start-stop-daemon的一项功能,我曾与其他用户一起使用该功能。

通过不使用start-stop-daemon,此问题已得到解决。在我的暴发户剧本,我现在作为mainuser使用sudo运行:

sudo -u mainuser /usr/local/bin/mongod --journal --nohttpinterface --dbpath /home/mainuser/data/db-secondary --logpath /home/mainuser/data/logs/mongodb-secondary.log --logappend --replSet appname --port 30001 

这是因为PID文件已经存在运行的mongod。

只需使用不同的启动停止守护进程的PID。例如,

sudo start-stop-daemon --start --pid=/var/run/mongodb2.pid --chuid mongodb --exec /usr/bin/mongod -- --config /etc/mongodb2.conf 

所以不会抱怨 “在/ usr/bin中/ mongod的已经运行”

+0

嗯..我和操作系统有同样的问题,并且/ var/run中没有mongodb.pid文件..但是我确实有另一个mongodb运行(从命令行)。当我停止那个时,我可以使用'start-stop-daemon'(它由'sudo start mongodb'使用)。 – drevicko

+0

使用我的apt-installed mongodb(1:2.0.6-1ubuntu4),init脚本没有'--pid'选项,但是有'--exec/usr/bin/mongod' - 这意味着如果' mongod'可执行文件正在系统上的任何地方运行,初始化脚本将不会启动它。 – drevicko

+0

参数是'--pidfile' – geronime

可能的解决方法: 您需要使用start-stop-daemon的重点--name给不同的名称到不同的进程。 例如,对于node.js的:

start-stop-daemon --name node-charts --start --exec /usr/bin/node -- someapp.js

start-stop-daemon --name node-web --start --exec /usr/bin/node -- someotherapp.js

没有名字也不会启动,因为它具有相同的/ usr/bin中/节点进程名。