12

mongodb 附带的标准 upstart 脚本工作正常:

# Ubuntu upstart file at /etc/init/mongodb.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodb/
    mkdir -p /var/log/mongodb/
end script

start on runlevel [2345]
stop on runlevel [06]

script
  ENABLE_MONGODB="yes"
  if [ -f /etc/default/mongodb ]; then . /etc/default/mongodb; fi
  if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb.conf; fi
end script

如果我想运行第二个 mongod 实例,我想我只需复制/etc/mongodb.conf->/etc/mongodb2.conf/etc/init/mongodb.conf->/etc/init/mongodb2.conf并更改第一个 conf 文件中的 std 端口。然后调整上面的脚本以从新创建的/etc/mongodb2.conf.

然后我可以说start mongodb2服务开始了......但它在开始后立即被杀死。我要改变什么来让两个进程都启动并运行?

 # Ubuntu upstart file at /etc/init/mongodb2.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodb2/
    mkdir -p /var/log/mongodb2/
end script

start on runlevel [2345]
stop on runlevel [06]

script
  ENABLE_MONGODB="yes"
  if [ -f /etc/default/mongodb ]; then . /etc/default/mongodb; fi
  if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb2.conf; fi
end script
4

6 回答 6

10

我无法让“标准”暴发户脚本工作(如上所述),所以我将其更改为:

# Ubuntu upstart file at /etc/init/mongodb.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodb/
    mkdir -p /var/log/mongodb/
end script

start on runlevel [2345]
stop on runlevel [06]

script

  exec sudo -u mongodb /usr/bin/mongod --config /etc/mongodb.conf

end script

如果您想运行其他 mongodb 实例,只需复制 *.conf 文件并/etc/mongodb2.conf更改/etc/init/mongodb2.conf

# Ubuntu upstart file at /etc/init/mongodb2.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodb2/
    mkdir -p /var/log/mongodb2/
end script

start on runlevel [2345]
stop on runlevel [06]

script

  exec sudo -u mongodb /usr/bin/mongod --config /etc/mongodb2.conf

end script

我认为唯一不起作用的是restart mongodb-您必须stop然后start再...

于 2011-09-13T13:05:58.103 回答
5

我知道已经有一个公认的解决方案,但我认为这个更优雅。

另一种方法是使用 start-stop-daemon 的 pid 文件创建。例如,我有 2 个 mongos 在同一台服务器上运行,有 2 个不同的 upstart 脚本,两条神奇的线是:

exec start-stop-daemon --make-pidfile --pidfile /var/run/mongodb-router.pid --start --startas /data/bin/mongos --chuid mongo -- --logappend --logpath /mnt/log/mongos.log --configdb mongo2-config01,mongo2-config02,mongo2-config03


exec start-stop-daemon --make-pidfile --pidfile /var/run/mongodb-routerrt.pid --start --startas /data/bin/mongos --chuid mongo -- --logappend --logpath /mnt/log/mongos-rt.log --configdb mongort-config01,mongort-config02,mongort-config03 --port 27027

请注意,一个具有“--pidfile /var/run/mongodb-router.pid”,另一个具有“--pidfile /var/run/mongodb-routerrt.pid”和不同的端口。

于 2011-10-27T16:31:54.657 回答
2

是的,我今天遇到了同样的问题。原因是默认脚本使用 start-stop-daemon 来启动 mongo,这是专门为确保只有一个版本的进程在运行而设计的。您已经发现解决此问题的一种方法是不使用 start-stop-daemon 并自己启动二进制文件。我也是这样做的,但我很想知道是否有更好的方法。

于 2011-10-04T20:52:13.007 回答
2

This is how I do it. 2 instances of mongodb, with start-stop-daemon, on the same server

that are my start-stop-daemon configs

exec start-stop-daemon --make-pidfile --pidfile /var/lib/mongodb/db1.pid --start --quiet --chuid mongodb --name mongod1 --exec /usr/bin/mongod -- --config etc/mongodb1.conf

exec start-stop-daemon --make-pidfile --pidfile /var/lib/mongodb/db2.pid --start --quiet --chuid mongodb --name mongod2 --exec /usr/bin/mongod -- --config etc/mongodb2.conf

pay attention to the --name option. That did the trick for me

于 2013-08-15T09:22:15.940 回答
1

这两个守护进程无法监听同一个 tcp 端口,因此您必须更改 mongod2 的 --port 参数才能监听不同的端口。
两个守护进程不能共享相同的数据目录,因此您必须更改 mongod2 的 --data-dir 参数。

于 2011-09-05T07:12:46.990 回答
1

我发现以下新贵对我有用

# Ubuntu upstart file at /etc/init/mongodb.conf

description "manage mongodb instance"

start on runlevel [2345]
stop on runlevel [06]

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

env MONGODB_USER=mongodb
env MONGODB_DATA=/var/lib/mongodb/
env MONGODB_LOG=/var/log/mongodb/
env MONGODB_PID=/var/run/mongodb.pid

pre-start script
  if [ ! -d $MONGODB_DATA ]; then
    mkdir -p $MONGODB_DATA
    chown $MONGODB_USER:$MONGODB_USER $MONGODB_DATA
  fi

  if [ ! -d $MONGODB_LOG ]; then
    mkdir -p $MONGODB_LOG
    chown $MONGODB_USER:$MOGODB_USER $MONGODB_LOG
  fi
end script

exec start-stop-daemon --start --pidfile $MONGODB_PID --chuid $MONGODB_USER:$MONGODB_USER --exec /usr/bin/mongod -- --config /etc/mongodb/mongodb.conf

pre-stop exec start-stop-daemon --signal QUIT --stop --quiet --pidfile $MONGODB_PID --chuid $MONGODB_USER:$MONGODB_USER --exec /usr/bin/mongod -- --config /etc/mongodb/mongodb.conf
于 2013-05-27T18:05:46.567 回答