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の2番目のインスタンスを実行したい場合は、/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

(上記のように)「標準」の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

  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

すでに受け入れられている解決策があることは知っていますが、これはよりエレガントだと思います。

もう1つの方法は、start-stop-daemonのpidファイルの作成を使用することです。たとえば、2つの異なる起動スクリプトを使用して同じサーバーで2つのmongoを実行していて、2つの魔法の行は次のとおりです。

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

1つには「--pidfile/var/run/mongodb-router.pid」があり、もう1つには「--pidfile/var/run/mongodb-routerrt.pid」と別のポートがあることに注意してください。

于 2011-10-27T16:31:54.657 に答える
2

ええ、私は今日これと同じ問題に遭遇しました。その理由は、デフォルトのスクリプトがstart-stop-daemonを使用してmongoを開始するためです。これは、プロセスの1つのバージョンのみが実行されるように特別に設計されています。これを修正する1つの方法は、start-stop-daemonを使用せず、自分でバイナリを開始することです。それは私もそうですが、もっと良い方法があるかどうか知りたいです。

于 2011-10-04T20:52:13.007 に答える
2

これが私のやり方です。同じサーバー上のstart-stop-daemonを持つmongodbの2つのインスタンス

それが私のstart-stop-daemon設定です

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

--nameオプションに注意してください。それは私のためのトリックをしました

于 2013-08-15T09:22:15.940 に答える
1

2つのデーモンは同じtcpポートでリッスンできないため、別のポートをリッスンするには、mongod2の--portパラメーターを変更する必要があります。
2つのデーモンは同じデータディレクトリを共有できないため、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 に答える