3

我一直在通过mongod在同一台服务器上启动多个进程来测试副本集(因为使用多个服务更昂贵,我现在只是在测试)。

但是,由于我已将 mongo 更新到 v2.0.5 版本,因此当我尝试再次启动 mongod 时(在另一个端口上,使用另一个数据库文件夹等),我得到以下信息:

mongod already running

为什么会这样?是否有标志可以跳过此检查?

更新:由于某种原因,这只发生在我mongod这样运行时:

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

当我像这样运行它时不会发生:

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 上的新贵脚本中使用 for 。为什么会导致这个问题?

阅读手册页后,start-stop-daemon很明显它故意不尝试再次启动该过程,因为它认为它是相同的“服务”。但是,我只是start-stop-daemon为了让我可以使用 Upstart 以不同的用户身份运行。是否可以绕过检查,或者以不同的方式在暴发户中以非 sudo 用户身份运行?

4

3 回答 3

1

可能的解决方案:您需要使用 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/node 进程名称。

于 2015-06-04T15:25:43.653 回答
0

这原来是 的一个功能start-stop-daemon,我与 upstart 一起使用它作为另一个用户运行。

通过不使用start-stop-daemon,这个问题得到了解决。在我的新贵脚本中,我现在使用以下命令作为主用户运行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
于 2012-05-19T21:55:12.517 回答
-1

这是因为正在运行的 mongod 已经存在一个 pid 文件。

只需将不同的 pid 与 start-stop-daemon 一起使用。例如,

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

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

于 2013-06-22T17:01:26.027 回答