1. ホーム
  2. mongodb

[解決済み] Mongo Restart Error -- /var/run/mongodb/mongod.pid が存在する

2022-02-15 10:16:53

質問

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の運用では、この問題は発生しなかったのですが。

解決方法は?

OK、私の最初の回答で持っていたものより良い解決策を見つけました。 私の前の答えは、単に症状をなくしただけでした。 私は、他の何人かの人が他の様々なディレクトリをchownしなければならないのを見ました。 私は、問題は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 バージョンでも動作するはずです。