ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

MongoDBが起動できない理由。コマンド名がややこしくて凡ミス。

mongoDB logo
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。※ mongoDBのロゴはmongodb.comの商標です。当サイトがmongoDB公認を示すものではありません。

MongoDBが突然、起動できなくなりました。なんで?

調べてみるとアホなことしてる。コマンド名を間違えて実行してしまいテンポラリファイルのパーミッションが変わってた。

このコマンド名がややこしい。systemdのサービス名と同じにしたら間違えることあるでしょ?

MongoDB4.2.8
CentOS7.8.2003
環境

急にMongoDBが起動できなくなりました。こんなエラーが出ます。

systemctl start mongod
Job for mongod.service failed because the control process exited with error code. See "systemctl status mongod.service" and "journalctl -xe" for details.

ジャーナルログを見ろってか? よし、見てみよう。

journalctl -ex
 6月 17 19:39:01 *** polkitd[630]: Registered Authentication Agent for unix-process:1939:135986 (system bus name :1.31 [/usr/bin/pkttyagent --no
 6月 17 19:39:01 *** systemd[1]: Starting MongoDB Database Server...
-- Subject: Unit mongod.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mongod.service has begun starting up.
 6月 17 19:39:01 *** mongod[1950]: about to fork child process, waiting until server is ready for connections.
 6月 17 19:39:01 *** mongod[1950]: forked process: 1953
 6月 17 19:39:01 *** mongod[1950]: ERROR: child process failed, exited with error number 14
 6月 17 19:39:01 *** mongod[1950]: To see additional information in this output, start without the "--fork" option.
 6月 17 19:39:01 *** systemd[1]: mongod.service: control process exited, code=exited status=14
 6月 17 19:39:01 *** systemd[1]: Failed to start MongoDB Database Server.
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mongod.service has failed.
--
-- The result is failed.
 6月 17 19:39:01 *** systemd[1]: Unit mongod.service entered failed state.
 6月 17 19:39:01 *** systemd[1]: mongod.service failed.

『子プロセスがエラー』『--forkオプションなしで起動してみろ』

エンジニア
いや、systemctl使ってんだけど?オプション変更って言われても...。原因も分からんし。

ログファイルを見てみた。

/var/log/mongodb/mongod.log
2020-06-17T19:39:01.042+0900 I  CONTROL  [main] ***** SERVER RESTARTED *****
2020-06-17T19:39:01.046+0900 I  CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2020-06-17T19:39:01.055+0900 W  ASIO     [main] No TransportLayer configured during NetworkInterface startup
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten] MongoDB starting : pid=1953 port=27017 dbpath=/var/lib/mongo 64-bit host=***
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten] db version v4.2.8
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten] git version: 43d25964249164d76d5e04dd6cf38f6111e21f5f
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten] allocator: tcmalloc
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten] modules: none
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten] build environment:
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten]     distmod: rhel70
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten]     distarch: x86_64
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten]     target_arch: x86_64
2020-06-17T19:39:01.055+0900 I  CONTROL  [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, processManagement: { fork: true, pidFilePath: "/var/run/mongodb/mongod.pid", timeZoneInfo: "/usr/share/zoneinfo" }, security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongo", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2020-06-17T19:39:01.055+0900 E  NETWORK  [initandlisten] Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted
2020-06-17T19:39:01.055+0900 F  -        [initandlisten] Fatal Assertion 40486 at src/mongo/transport/transport_layer_asio.cpp 684
2020-06-17T19:39:01.055+0900 F  -        [initandlisten]

***aborting after fassert() failure

あった。こいつだ。

Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted

srwx------ 1 root root 0 6月 17 19:26 mongodb-27017.sock

rootユーザーが作ってる。そういえば、rootユーザでmongoコマンドと間違えて『mongod』って打った。

(mongoコマンドはクライアントツール起動のコマンド。)

ソケットファイルを退避してもう1回起動。

cd /tmp
mv mongodb-27017.sock mongodb-27017.sock.bak
systemctl start mongod
systemctl status mongod
● mongod.service - MongoDB Database Server
   Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2020-06-17 19:58:21 JST; 1min 20s ago
     Docs: https://docs.mongodb.org/manual
  Process: 2146 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 2143 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 2141 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 2139 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
 Main PID: 2148 (mongod)
   CGroup: /system.slice/mongod.service
           mq2148 /usr/bin/mongod -f /etc/mongod.conf

 6月 17 19:58:20 *** systemd[1]: Starting MongoDB Database Server...
 6月 17 19:58:20 *** mongod[2146]: about to fork child process, waiting until server is ready for connections.
 6月 17 19:58:20 *** mongod[2146]: forked process: 2148
 6月 17 19:58:21 *** systemd[1]: Started MongoDB Database Server.

うん、直った。

ちなみに、ソケットファイルの権限はmongodユーザー。

srwx------ 1 root root 0 6月 17 19:26 mongodb-27017.sock.bak
srwx------ 1 mongod mongod 0 6月 17 19:58 mongodb-27017.sock

mongodは、サービス名だけでなくサービス起動コマンド名にもなっていて、いらぬ間違いを犯してroot権限でファイルを作ってしまったというオチ。

ダサい...。あーダサい。もう一回言っとこう。だっせ~。

こんな間違いやってはいけませんという話でした。

MongoDBはsystemctlに登録されているサービスなので、サービスのステータス(systemctl status)、ジャーナル(journalctl -ex)、サービスのログファイルを見れば、解決のヒントがある。

前の投稿
MongoDB, インストール直後にやっておくこと。最低限のセキュリティ設定。
コメントを残す

*