Отсутствует скрипт инициализации MongoDB 3.2.6
Я следовал инструкциям по установке MongoDB через apt-get. Был сбой с проверкой, но отслеживание этого на 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 входят различные сценарии инициализации, в том числе сценарий инициализации /etc/init.d/mongod.
Файл существует в источниках на GitHub. Так что я могу продолжать. Но я хотел бы знать, почему критически важный файл конфигурации отсутствует в успешно установленном пакете. (Назовите меня законченным.)
Моя версия Ubuntu - 16.10, которая официально не поддерживается. Я не думаю, что это может быть причиной. Может ли виновата релизная версия? Или было ошибкой устанавливать пакеты без подписи? Или сам пакет сломан? Или здесь что-то еще происходит?
1 ответ
Я был просто неправ. Выпуск несовместимость является проблемой. Похоже, что послеустановочный скрипт молча сбоил, поэтому отсутствующий файл не существовал.
Решение оказалось очень похожим на этот вопрос, что предполагает запуск этого скрипта.
Я внес небольшие изменения в скрипт, в соответствии с изменением расположения файлов по умолчанию для MongoDB 3.2.6. (Изменения не являются строго необходимыми. Я просто не люблю Cruft.) Раньше файлы данных были расположены в /data/db/
, Местоположение по умолчанию сейчас /var/lib/mongodb/
и старое местоположение больше не используется вообще. Поэтому я удалил строки в скрипте, которые ссылаются на этот путь.
Ubuntu теперь использует systemd по умолчанию, а не Upstart, поэтому /var/run/mongodb/
больше не нужен. Я просто закомментировал эти строки, а не удалял их. Если по какой-либо причине вы все еще используете Upstart, вам нужно раскомментировать три строки, которые относятся к этому пути.
Обновленный скрипт выглядит так:
# 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