web-dev-qa-db-ja.com

Mongo Restart Error-/var/run/mongodb/mongod.pidが存在します

新しいAWS Linux AMI 2016.09.1(HVM)を開始し、最新のMongodbリリースをダウンロードしました。 MongoDBバージョン3.0.14を使用しています。 /etc/mongod.confを次のように更新しました。

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# network interfaces
net:
  port: 27017
#  bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on
    all interfaces.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

サービスを使用して初めてMongodbを実行し、

Sudo service mongod start

すべて正常に動作します。 Mongodbを停止して再起動すると、

Sudo service mongod stop
Sudo service mongod restart

次のエラーが表示されます。

Error starting mongod. /var/run/mongodb/mongod.pid exists.

これは、ログファイル/var/log/mongodb/mongod.logにあるものです。

2017-01-16T14:11:16.869+0000 I CONTROL  ***** SERVER RESTARTED *****
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] MongoDB starting :
    pid=2820 port=27017 dbpath=/var/lib/mongo 64-bit hos
    t=ip-10-0-0-91
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] db version v3.0.14
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] git version:
    08352afcca24bfc145240a0fac9d28b978ab77f3
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] build info: Linux
    ip-10-63-190-181 3.4.43-43.43.amzn1.x86_64 #1 SMP Mon
    May 6 18:04:41 UTC 2013 x86_64 BOOST_LIB_VERSION=1_49
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] options: { config:
    "/etc/mongod.conf", net: { port: 27017 }, processMan
    agement: { fork: true, pidFilePath: "/var/run/mongodb/mongod.pid" },
    storage: { dbPath: "/var/lib/mongo", journal: { enabled: t
    rue } }, systemLog: { destination: "file", logAppend: true, path:   
    "/var/log/mongodb/mongod.log" } }
2017-01-16T14:11:16.893+0000 E NETWORK  [initandlisten] Failed to unlink
    socket file /tmp/mongodb-27017.sock errno:1 Operation
    not permitted
2017-01-16T14:11:16.893+0000 I -        [initandlisten] Fatal Assertion   
    28578
2017-01-16T14:11:16.893+0000 I -        [initandlisten]

***aborting after fassert() failure

この問題について解決策を掲載したブログを見たことがありますが、どれも機能していないようです。これを理解しようとして日曜日一日中過ごしました。以前のAWSインスタンスとMongoを実行する前に、この問題が発生したことはありません。

15
skmansfield

さて、最初の答えで私が持っていたものに対するより良い解決策を見つけました。私の以前の答えは、単に症状を除去しました。他の数人が他のさまざまなディレクトリをチャネリングしなければならないことがわかりました。問題は、mongodが正しく再起動せず、失敗したために多くのディレクトリが誤って設定されたままになることだと思います。複数のスレッドが実行されていると思われるため、誤って設定されるディレクトリはランダムです。 AmazonのAWS AMI Linuxリリースを使用して、MongoDB 3.4をインストールしています。非常に良いMongoDBインストールスクリプトを見つけました

 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-Amazon/

だからここに修正です。私はそれを数回テストし、そのたびに機能しました。通常どおりにmongoをインストールします。役立つ場合は、上記のスクリプトを使用してください。 mongodを起動する前に、次のコマンドを実行します。

Sudo chkconfig mongod on

上記のインストールスクリプトではchkconfigが強調表示されていますが、スクリプトの下部では表示されない場合があります。これにより、毎回mongodを正常に再起動できます。これは他のLinuxバージョンでも動作するはずです。

5
skmansfield

OK、問題が見つかりました。上記のDave Maplesが提案したように、/ var/run/mongodb/mongod.pidファイルを削除しました。ただし、MongoDBはまだ実行されません。ログファイルをもう一度見て、このファイルについてbarえるのを見ました。

/tmp/mongodb-27017.sock

正しい許可がなかったようです。私は試した、

Sudo chown mongod:mongod /tmp/mongodb-27017.sock

そして、それはうまくいきました。これで、MongoDBを複数回起動/停止/再起動しても、問題はなくなりました。ファイルのアクセス許可により、MongoDBが適切にクリーンアップされず、ディレクトリに/var/run/mongodb/mongod.pidファイルが残ったと思います。これにより、「mongodの起動エラー。/var/run/mongodb/mongod.pidが存在します」エラーが発生しました。しかし、これは本当の問題ではありませんでした。本当の問題は/ tmp /パーミッションでした。 mongod.pidファイルを削除し、Mongodを再起動した後にログファイルを見ると、権限の問題が示されました。そこで、問題を解決したのは次のとおりです。

Sudo rm /var/run/mongodb/mongod.pid
Sudo chown mongod:mongod /tmp/mongodb-27017.sock

新しいサーバーにMongoDBをインストールした直後に、MongoDBを実行してから問題を回避できたら、「Sudo chown mongod:mongod /tmp/mongodb-27017.sock」を試してみたら間違いないでしょう。フロリダの晴れた日をこの日に無駄にしました。

14
skmansfield

設定ファイルのIPを変更できます。

vim /etc/mongod.conf

#  bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on
    all interfaces.
  bindIp: xxx.xxx.xxx.xxx
1
NOZUONOHIGH