私は方向apt-get 経由で MongoDB をインストールします。検証で問題が発生しましたが、StackExchange で追跡すると、署名プロセスの既知の問題であることがわかったので、apt-get install mongodb
フラグなしで再実行しました-y
。その後、インストールは成功したように見えました。しかし、サービスを開始しようとすると、次の問題が発生しました。
$ sudo service mongod start
[sudo] password for mark:
Failed to start mongod.service: Unit mongod.service not found.
$ sudo service mongod status
● mongod.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
案の定、ファイルは/etc/init.d/mongod
存在しません。インストール手順では、このファイルが提供されていることが明示的に記載されています。
mongodb-org パッケージには、init スクリプト /etc/init.d/mongod を含むさまざまな init スクリプトが含まれています。
ファイルは GitHub のソースに存在します。したがって、作業を続けることができます。ただし、正常にインストールされたパッケージから重要な構成ファイルが欠落している理由を知りたいです。(私を完璧主義者と呼んでください。)
私の Ubuntu リリースは 16.10 ですが、これは公式にはサポートされていません。これが原因であるとは思えません。リリース バージョンが本当に原因なのでしょうか? それとも、署名されていないパッケージをインストールしたのが間違いだったのでしょうか? それとも、パッケージ自体が壊れているのでしょうか? それとも、他に何か問題がありますか?
答え1
私が間違っていました。リリースの非互換性が問題です。インストール後のスクリプトがサイレントに失敗していたため、不足しているファイルが存在しなかったようです。
解決策は、この質問、これは実行を示唆しているこのスクリプト。
MongoDB 3.2.6 のデフォルトのファイルの場所の変更に合わせて、スクリプトに小さな変更を加えました。(変更は厳密には必要ではありません。私は単に不要なものが嫌いなのです。) 以前は、データ ファイルは に配置されていました/data/db/
。現在のデフォルトの場所は であり/var/lib/mongodb/
、古い場所はまったく使用されなくなりました。そのため、そのパスを参照するスクリプトの行を削除しました。
Ubuntu は現在、Upstart ではなく systemd をデフォルトで使用するため、/var/run/mongodb/
不要になりました。これらの行は削除するのではなく、単にコメント アウトしました。何らかの理由で Upstart をまだ使用している場合は、このパスを参照する 3 行のコメントを解除する必要があります。
更新されたスクリプトは次のようになります。
# enable_mongo.sh
echo '[Unit]
Description=High-performance, schema-free document-oriented database
After=syslog.target network.target
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod -f /etc/mongod.conf
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/mongod.service
# Setup the required directories
# mkdir -p /var/run/mongodb/
mkdir -p /var/log/mongodb/
mkdir -p /var/lib/mongodb/
# chown mongodb:mongodb /var/run/mongodb/
chown mongodb:mongodb /var/log/mongodb/
chown mongodb:mongodb /var/lib/mongodb/
# chmod 0755 /var/run/mongodb/
chmod 0755 /var/log/mongodb/
chmod 0755 /var/lib/mongodb/
# Start the new service and enable it on boot
systemctl --system daemon-reload
systemctl enable mongod.service
echo "Starting"
systemctl start mongod.service