![Ubuntu 16.04 にアップグレードした後、MongoDB 3.0.2 が起動しない](https://rvso.com/image/881705/Ubuntu%2016.04%20%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81MongoDB%203.0.2%20%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%84.png)
最近、Ubuntu 16.04 にアップグレードしましたが、その後 MongoDB 3.0.2 が起動しなくなりました。
$ sudo service mongod start
エラーが発生します:
Failed to start mongod.service: Unit mongod.service failed to load: No such file or directory.
これらのエラーログは、systemctl status mongod.service
● mongod.service
Loaded: loaded (/etc/init.d/mongod; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2016-04-29 10:48:02 IST; 10s ago
Docs: man:systemd-sysv-generator(8)
Process: 8624 ExecStart=/etc/init.d/mongod start (code=exited, status=1/FAILURE)
mongod[8223]: Rather than invoking init scripts through /etc/init.d, use the service(8)
mongod[8223]: utility, e.g. service mongod start
mongod[8223]: initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection
mongod[8223]: Since the script you are attempting to invoke has been converted to an
mongod[8223]: Upstart job, you may also use the start(8) utility, e.g. start mongod
mongod[8223]: start: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection r
systemd[1]: mongod.service: Control process exited, code=exited status=1
systemd[1]: Failed to start mongod.service.
systemd[1]: mongod.service: Unit entered failed state.
systemd[1]: mongod.service: Failed with result 'exit-code'.
以下の解決策を試しましたが、どれも機能しませんでした。
- 次の内容のファイル /lib/systemd/system/mongodb.service を作成しました:
[ユニット] 説明=高性能、スキーマフリーのドキュメント指向データベース After=network.target
[サービス] ユーザー=mongodb ExecStart=/usr/bin/mongod --quiet --config /etc/mongodb.conf
[インストール] WantedBy=multi-user.target
- upstartvをインストールしてみました
sudo apt-get install upstart-sysv
答え1
- upstart-sysv を削除すると、systemd ユニットで mongo を起動できるようになります。
- mongod.config設定ファイルを確認してください。
processManagement.fork
:true
- mongo dbpath とログ フォルダーを確認してください。
mongodb
スクリプトを実行するユーザー (サービス ファイル内) には、これらのファイルにアクセスする権限が必要です。 - それでも問題が解決しない場合は、mongod.log ファイル (構成ファイルで指定) を確認してください。そこでより詳細なエラーを見つけることができます。
答え2
はい、そうしました:
- バックアップ:
# cp -vr /var/lib/mongodb /root/
# cp /etc/mongod.conf /root
- 古いinitを削除しました:
# rm -fr /etc/init.d/mongod
3 - ファイルを作成しましたマルチユーザーターゲット、 のように:
# nano /etc/systemd/system/multi-user.target.wants/mongod.service
4 - すでに Xenial になっている他のシステムからこのスクリプトをコピーしました:
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/env bash -c "numactl --interleave=all /usr/bin/mongod --quiet --config /etc/mongod.conf"
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
5 - それでも起動しようとすると失敗します(起動コマンドを見てください。ヌマクトル、 それで:
# apt-get install -y numactl
6 - サービスを再読み込みします:
# systemctl daemon-reload
7 - 古いロックを削除します(データベースが正常であることを祈ります)。
# rm -fr /var/lib/mongodb/mongod.lock
8 - 再起動してステータスを確認し、満足する:
# systemctl restart mongod.service
# systemctl status mongod.service
● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/etc/systemd/system/multi-user.target.wants/mongod.service; bad; vendor preset: enabled)
Active: active (running) since Qui 2018-05-17 21:15:16 -03; 2s ago
Docs: https://docs.mongodb.org/manual
Main PID: 6301 (mongod)
CGroup: /system.slice/mongod.service
└─6301 /usr/bin/mongod --quiet --config /etc/mongod.conf
Mai 17 21:15:16 xx-server systemd[1]: Started High-performance, schema-free document-oriented database.
「」
今日、これに遭遇したばかりなので、LTS のこの領域では、MongoDB を使用した Xenial となる信頼できるシステムがまだいくつかあるのかもしれません。マークアップについては申し訳ありませんが、まだ改善中です。皆さんの幸運を祈ります!