私はFedora 20を実行しており、公式ドキュメントの Red Hatインストールガイド に従ってMongoDBをインストールしています。最初にmongod
デーモンをエラーなしでサービスとして実行できましたが、マシンをシャットダウンして戻ったときに、何らかの障害のためにサービスの開始が拒否されました。
正常に実行された後に表示されるログに、次のように表示されます。
***** SERVER RESTARTED *****
ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: No such file or directory
mongod
を起動しようとしたり、mongod --repair
を手動で実行しようとすると、起動エラーで次のメッセージが表示されます。
ERROR: dbpath (/data/db) does not exist.
Create this directory or give existing directory in --dbpath.
/etc/mongod.conf
の設定ファイルで、データベースパスの設定が次のようになっていることを考えると、これは奇妙です。
dbpath=/var/lib/mongo
最後に、このコマンドを実行すると:
mongod --dbpath /var/lib/mongo
デーモンは正常に起動します。ただし、サービスを開始するためのエラーのない動作を複製することはできません。
誰が正確に何が間違っているのか、mongod
をサービスとして実行し始める方法を教えてもらえますか?
編集
mongod --config /etc/mongod.conf
を実行すると、このメッセージが表示されます。
about to fork child process, waiting until server is ready for connections. forked process: 2702 ERROR: child process failed, exited with error number 1
/var/run/mongodb
ディレクトリが存在しなかったため、作成してmongodユーザーに割り当てました。残念ながら、それは大きな違いを生みませんでした。
私の/var/log/mongodb/mongod.log
はこのメッセージを表示します:
[initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /var/lib/mongo/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Fedora 20でうまくいったのは、ブートごとに一時ディレクトリを作成する必要があり、それはsystemd-tmpfilesによって処理されることです。したがって、ファイル/lib/tmpfiles.d/mongodb.confを作成し、その中に1行を追加します。
d /var/run/mongodb 0755 mongod mongod
再起動時に処理するようです。すぐに再起動したくない場合は、次を使用して実行できます。
Sudo systemd-tmpfiles --create mongodb.conf
(systemd-tmpfilesのmanページを参照してください)
私は同じ問題を抱えており、一時的に解決し、SELinuxを無効にし、マシンを再起動し、mongod.lockを削除しました。
#rm /var/lib/mongo/mongod.lock
ファイル/var/run/mongodb/mongo.pidを作成することにより(構成ファイル/etc/mongod.confに記載されているとおり):
#mkdir /var/run/mongodb
#touch /var/run/mongodb/mongod.pid
777の許可を与える:
#chmod 777 /var/run/mongodb/mongod.pid
そしてmongoを起動します:
#service mongod start
ただし、マシンを再起動しても問題は解決しません。フォルダとファイルが消えます。
私はこれをしばらく調べましたが、あたかもpidフォルダーとファイルのアクセス許可がデフォルトのデーモンで機能していないように見えます。
私が遭遇した最も簡単な解決策は、設定ファイルの行の前に#を置くだけでpidファイルを無効にすることです。
vi /etc/mongod.conf
pidfilepath =/var/run/mongodb/mongod.pidと書かれている行を見つけて、それに応じて変更します。
# pidfilepath=/var/run/mongodb/mongod.pid
コメントアウトの内容については、こちらをご覧ください。 http://docs.mongodb.org/manual/reference/configuration-options/#processManagement.pidFilePath
以下を使用してmongodをサービスとして開始する場合:
須藤サービスモンゴッドスタート
Mongod.confのlogpath、dbpath、およびpidfilepathに定義されているディレクトリが存在し、mongod:mongodによって所有されていることを確認してください。
OpenSuse 13.2でmongodb 3.0.4を実行すると同じ問題が発生し、/ var/runの下のmongodディレクトリが見つからないことがわかりました。ディレクトリを手動で作成した場合、再起動後に消えます。
/etc/init.d/mongod起動スクリプトに次の行を追加して解決しました。
mkdir -p /var/run/mongod
chown $MONGO_USER:$MONGO_GROUP /var/run/mongod
「mongo.conf」ファイルの行の下にコメントします。
pidfilepath =/var/run/mongodb/mongod.pid
これはUbuntuでうまくいきました:
Sudo kill $(Sudo lsof -t -i:27017)
Sudo rm -rf /tmp/mongodb-27017.sock
Sudo rm -f /var/lib/mongo/mongod.lock
Sudo rm -f /var/run/mongodb/mongod.pid
Sudo mkdir -p /var/run/mongodb/
Sudo touch /var/run/mongodb/mongod.pid
Sudo chown -R mongodb:mongodb /var/run/mongodb/
Sudo chown mongodb:mongodb /var/run/mongodb/mongod.pid
Sudo service mongod start
セントOS用に解決された以下のコマンド
[〜#〜] error [〜#〜]:
service mongod status
Error starting mongod. /var/run/mongodb/mongod.pid exists
FIXED BY:
rm /var/lib/mongo/mongod.lock
chown -R mongod:mongod /var/log/mongodb/
chown -R mongod:mongod /var/run/mongodb/
chown -R mongod:mongod /var/lib/mongo/
chmod 777 /var/run/mongodb/mongod.pid
mongod --dbpath /var/lib/mongo
Systemd-tmpfilesによって処理されるpidfile /var/run/mongodb
のtemp dirの場所を作成する必要があります。そのため、ルートとして/lib/tmpfiles.d/mongodb.confファイルを作成します。
lnx#>須藤su
lnx#> cd /lib/tmpfiles.d
lnx#> echo“ d/var/run/mongodb 0755 mongod mongod”> mongodb.conf
次に、再起動するか、次のコマンドを実行して、その一時ディレクトリをアクティブにします。
lnx#> Sudo systemd-tmpfiles --create mongodb.conf
Mongodサービスを開始します。
lnx#> Sudo systemctl start mongod.service
Ubuntuで同様の問題が発生しました。ほぼすべてのERRORヒントに遭遇しました。
_child process failed, exited with error number 1
_
or _child process failed, exited with error number 100
_
または[signalProcessingThread] got signal 2 (Interrupt: 2), will terminate after current cmd ends
何回もMongodbを削除して、再度インストールを試みますが、問題は残ります。..
最後に私はこの方法に来ました:最初にデータをバックアップし、次にMongodbを削除します
_#Sudo apk-get autoremove mongodb-org
_
Mongodbに関連するすべてのファイルを見つけます。
_/#find -name mongo*
_
/ var/cache/...およびその他すべてのパッケージを含め、「rm」または「rmdir」でそれらをすべて削除します。
その後、最初に行ったようにインストールを繰り返します。
_#echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | Sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
#Sudo apt-get update
#Sudo apt-get install -y mongodb-org
_
再び実行されます。
私はmongod.confを次のように変更して問題を解決したときに同じ問題に遭遇しました〜
port=27017
dbpath=/usr/local/mongodb/data/db/
logpath=/usr/local/mongodb/logs
fork = true
ヒント:logpathはフォルダーではなくログファイルです。