56

Ubuntu で MongoDB 2.2 を実行しています。

sudo mongod

データベースの場所ではない /data/db が見つからないというエラーが表示されます。/var/lib/mongodbmongod.conf では、データベース パスは、db が配置されている Ubuntu 10gen のデフォルトとして指定されています。mongodconfファイルが見つからないようです。だから私が実行すると:

sudo mongod -f /etc/mongodb.conf

サーバーは正常に起動し、出力はログ ファイルに記録されます: /var/log/mongodb/mongodb.log. すべてが幸せです。別のシェルに切り替えて、mongo シェルにログインし、データベースを表示してクエリを実行できます。

だから、私はそれをキャンセルして、サービスとして実行しようとします:

> sudo status mongodb
mongodb stop/waiting
> sudo start mongodb
mongodb start/running, process 10468

ここまでは良さそうですが、mongo サーバーは起動しませんでした。別の実行:

> sudo status mongodb
mongodb stop/waiting
> mongo
MongoDB shell version: 2.2.0
connecting to: test
Sat Sep  1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed

「test」は正しいデータベースではなく、ログ ファイルには何も表示されません。

何が間違っているのか途方に暮れています。upstart スクリプトを確認しましたが、問題ないようです。/etc/init/mongodb.conf実行:

mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb.conf
4

10 に答える 10

115

OK、これはすべてアクセス許可に帰着しますが、一歩一歩見ていきましょう。実行するsudo mongodと、構成ファイルがまったくロードされず、文字通りデフォルトでコンパイルされた状態で開始されます-ポート27017、 /data/db のデータベースパスなど-そのため、そのフォルダーが見つからないというエラーが発生しました. 「Ubuntuのデフォルト」は、構成ファイルを指定した場合にのみ使用されます(サービスコマンドの使用を開始すると、これは舞台裏で行われます).

次に、次のように実行しました。

sudo mongod -f /etc/mongodb.conf

以前に問題がなかった場合は、現在は問題があります - root ユーザーとして通常の構成 (通常の dbpath とログを指す) でプロセスを実行しました。つまり、通常の MongoDB フォルダーには、user:group のroot:root.

これにより、通常のサービスとして再度開始しようとするとエラーが発生します。これは、mongodb ユーザー (サービスが実行を試みるユーザー) がこれらのroot:rootファイルにアクセスする権限を持たないためです。ログファイルに書き込み、情報を提供します。

したがって、通常のサービスとして実行するには、これらの権限を修正する必要があります。まず、MongoDB が現在ルートとして実行されていないことを確認してから、次のようにします。

cd /var/log/mongodb
sudo chown -R mongodb:mongodb .
cd /var/lib/mongodb
sudo chown -R mongodb:mongodb .

これで修正されるはずです (user:group が であると仮定mongodb:mongodb) ls -al。これが完了すると、サービスを正常に再開できるようになります。

于 2012-09-02T01:07:57.423 に答える
39

最初に、mongodbユーザー/グループがデータディレクトリとログファイルの両方に書き込む権限を持っていることを確認します。

$ sudo chown -R mongodb:mongodb /var/lib/mongodb/.

$ sudo chown -R mongodb:mongodb /var/log/mongodb.log

次のコマンドを使用して、 MongoDBをデーモン(バックグラウンド プロセス) として起動します。

$ mongod --fork --dbpath /var/lib/mongodb/ --smallfiles --logpath /var/log/mongodb.log --logappend

MongoDBをシャットダウンするには、Mongo CLI に入り、admin にアクセスして shutdown コマンドを発行します。

$ ./モンゴ

> 管理者を使用

> db.shutdownServer()

参照: http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo

于 2012-10-25T22:31:42.617 に答える
9

私も同じ問題を抱えていました。だから私は cd /var/lib/mongodb/ に行き、mongod.lockファイルを削除しました。

于 2012-12-22T09:41:04.503 に答える
2

/tmp何もうまくいかなかったので、ディレクトリの権限の問題であることがわかりました:

sudo chmod 1777 /tmp
sudo chown root:root /tmp
于 2016-01-06T12:03:17.890 に答える
1

上記の答えはどれもうまくいきませんでした。私は最終的にinitスクリプトをデバッグすることでそれを理解しました:

sudo bash -x /etc/init.d/mongodb start

そして、間違った構成パスをmongodに渡していたことがわかりました。/etc/init.d/mongodb の行を「CONF=/etc/mongodb.conf」から「CONF=/etc/mongod.conf」に変更しただけです。バージョン 2 は前者を使用し、バージョン 3 をインストールすると /etc/mongod.conf が新しい形式で追加されましたが、どうやら init スクリプトは更新されませんでした。

更新: init スクリプトが機能するという、より奇妙な問題が発生しましたが、これは、「sudo サービス mongodb start」ではなく、「sudo bash -x /etc/init.d/mongodb start」で実行した場合のみです。ストップも同じ。

于 2016-08-29T05:35:51.230 に答える