yum。 を使用してmongodb
インスタンスをインストールしました。これですべてが正常に動作します。 service mongod start
を使用してサービスを開始しました。それはうまくいきます。次に、構成ファイルのdata directory
とlog path
を変更しました。サーバーを再起動し、サービスを開始しました。しかし、私は以下のエラーを受け取ります:
Restarting mongod (via systemctl): Job for mongod.service failed. See 'systemctl status mongod.service' and 'journalctl -xn' for details.
[FAILED]
systemctl status mongod.service
を与えると、以下のようになります。
Loaded: loaded (/etc/rc.d/init.d/mongod)
Active: failed (Result: exit-code) since Wed 2015-03-18 11:35:56 IST; 22s ago
Process: 10672 ExecStop=/etc/rc.d/init.d/mongod stop (code=exited, status=0/SUCCESS)
Process: 10841 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)
Main PID: 10509 (code=exited, status=0/SUCCESS)
Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
Mar 18 11:35:56 localhost systemd[1]: Unit mongod.service entered failed state.
journalctl -xn
を与えると、以下のようになります。
-- Logs begin at Wed 2015-03-18 08:56:56 IST, end at Wed 2015-03-18 11:35:56 IST. --
Mar 18 11:30:01 localhost systemd[1]: Starting Session 20 of user root.
-- Subject: Unit session-20.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit session-20.scope has begun starting up.
Mar 18 11:30:01 localhost systemd[1]: Started Session 20 of user root.
-- Subject: Unit session-20.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit session-20.scope has finished starting up.
--
-- The start-up result is done.
Mar 18 11:30:01 localhost CROND[10712]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
-- Subject: Unit mongod.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mongod.service has begun starting up.
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
誰かがこれを修正するのを手伝ってくれる?ありがとう!!!
P.S。:作成したデータディレクトリには、ユーザーのすべての権限があります。ただし、データディレクトリをデフォルト(/var/lib/mongodb
)に変更すると、正常に機能します。
私は同様の問題に遭遇し、それが私の場合、誤って設定されたmongod.conf
ファイルであることがわかりました。また、新しいディレクトリの権限が適切に設定されていない可能性もあります。 chown -R mongod:mongod <directory name>
は、アクセスを保証する方法でした(もちろんchmod 600 <dir>
も同様です)。最後に、ls -Z
を実行して、コンテキストが正しいことを確認します。私は私のために働いたデフォルトのディレクトリとちょうど比較しました。
これがまだ解決されていない場合は、ログファイルの内容も表示してください。そこにいくつかの手がかりがあるかもしれません。
@mustaccioの発言を拡張すると、私にとっての答えは、新しいlogpath
およびdbpath
のSELinuxコンテキストでした。私は次のコマンドを実行しましたが、すべて順調でした。
Sudo chcon -Rv --type=mongod_log_t $logpath
Sudo chcon -Rv --type=mongod_var_lib_t $dbpath
(これはRHEL 7.1にありました)
Raspberry PiとUbuntuサーバーでこれを使用しました。
「mongod.serviceのジョブが失敗しました。詳細については、「systemctl status mongod.service」および「journalctl -xn」を参照してください。」
私はさまざまな理由でさまざまな機会にこの問題を抱えていました:
Mis-named .conf file – mongodbスクリプト(私は/etc/init.d/mongodb
に移動しました)、実際のファイルがCONF=/etc/mongod.conf
のときの57行目/etc/mongodb.conf
。 57行目を変更すると修正されました。また、スクリプト名も同じように変更できました。
mongod.lock file – mongodが最後に停止したときに、データベースを閉じる機会がありませんでした。これにより、mongod.lock
というファイルがデータベースフォルダーに残ります。フォルダー内には番号があります(mongoが最後に使用したPIDだと思います)。このファイルが存在する場合、mongodサービスを開始できません。ファイルを削除して、再試行してください。
mongo user – mongod.serviceの起動と実行を担当するLinuxユーザーを作成する必要がありました。私は「mongo」という名前を付け、/etc/init.d/mongodb
スクリプトを更新し、95行目でDAEMONUSER=${DAEMONUSER:-mongo}
に変更しました。もちろん、これはmongoという名前の新しいユーザー(または私が思っているもの)を作成した場合にのみ機能します。
DB権限 –これは一般的なものです。データベースフォルダーの場所を宣言したら、「mongo」ユーザーがそのファイルの所有権を持っていることを確認する必要があります。たとえば、私のデータベースは/data/db
に保存されています。次のコマンドを実行しました。Sudo chown –R mongo:mongo /data
これにより、/data
とそのすべてのサブディレクトリの所有権がmongoユーザーに移動しました。
間違ったサービス –これは私にとって少し恥ずかしいことでした。 mongo
ではなくmongod
をサービスとして開始しようとしました。 mongo
は、mongoに直接コマンドを実行および入力できるシェルです。このようにしてデータベースを作成し、たとえばいくつかのオブジェクトを追加しました。一方、mongod
は、書き込み/使用してアクセスする他のアプリケーションのデータベースをホストするバックグラウンドで実行されるmongoデーモンです。 confファイルやスクリプトなどで、それらを混同しないようにしてください。
これらの1つが問題を解決することを願っています。
余談ですが、mongodb.conf
ファイルは空です。ただし、それが空であっても、正しく指す必要があります。
私はこれを試してみましたが、うまくいきました。
Sudo chown -R mongodb:mongodb /var/log/mongodb
Sudo chown -R mongodb:mongodb /var/lib/mongodb
Sudo chmod -R 755 /var/lib/mongodb
Sudo chmod -R 755 /var/log/mongodb
Centos 7 Reposに付属するmongoからMongos独自のリポジトリにアップグレードするときにこの問題に遭遇しました。事実上、V2からV3にアップグレードしています。
Centos 7リポジトリにはユーザーmongodbが必要ですが、mongos自身のリポジトリにはユーザーmongodが必要であることがわかります
結局、ユーザー名が異なっていて気付かなかったため、新しいインストールが書き込むことができなかったのは、古いインストールからまだ存在していたログファイルでした。
私のシステム(Fedora)では、tmpfs(ram)に「/ var/log」があり、そのパーティションのすべてをリブートするたびに失われます。 SSDドライブがあり、I/Oを減らしたい(ドライブの寿命を節約する)ため、多くの人がこれを利用しています。
解決策は、/ var/log/mongodbディレクトリを作成し、システムを再起動するたびに所有者としてmongodbを設定することです。
次のようなスクリプトを使用します。
#!/bin/sh
Sudo mkdir /var/log/mongodb
Sudo chown mongodb:mongodb /var/log/mongodb
Mongodが使用しているユーザーがわからない場合は、次のようにします。
cat /etc/passwd | grep mongo
システムのスタートアップにスクリプトを追加します。
MongoDBサーバーを停止します。
service mongod stop
Mongoディレクトリを新しいディレクトリにコピーします。
rsync -av /var/lib/mongo /home/data/
古いディレクトリの名前を変更します。
mv /var/lib/mongo /var/lib/mongo.bak
新しい場所へのシンボリックリンク:
ln -s /home/data/mongo /var/lib/mongo
MongoDBサーバーを起動します。
service mongod start
これは許可の問題です。データディレクトリまたはログファイルのパスを変更する場合、新しいディレクトリへのアクセス許可を与える必要があります。その後、正常に実行されます。このような問題が発生した場合は、まずログファイル「mongod.log」を確認してください。
パスは編集しません。私はコマンドで問題を解決しました:
mongod --dbpath /data/mongo