Служба MongoDB не начнется после начальной настройки

Я запускаю Fedora 20 и устанавливаю MongoDB в Руководство по установке Red Hat в официальной документации. Мне удалось запустить демон mongod как услугу без ошибок в первый раз, но когда я выключил машину и вернулся, служба отказалась запускать из-за некоторого сбоя.

В моем журнале, указанном после успешного запуска, я вижу следующее:

***** SERVER RESTARTED *****
ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: No such file or directory

Если я попытаюсь запустить mongod или запустить mongod --repair вручную, я получаю это сообщение при ошибке запуска:

ERROR: dbpath (/data/db) does not exist.
Create this directory or give existing directory in --dbpath.

Это странно, учитывая, что в моем файле конфигурации в /etc/mongod.conf параметры для пути к базе данных следующие:

dbpath=/var/lib/mongo

Наконец, если я запустил эту команду:

mongod --dbpath /var/lib/mongo

Демон запускается просто отлично. Однако я не могу воспроизвести это поведение без ошибок для запуска службы.

Может ли кто-нибудь сказать мне, что именно не так, и как я могу запустить mongod в качестве службы?

ИЗМЕНИТЬ

Я получаю это сообщение, если я запустил mongod --config /etc/mongod.conf:

about to fork child process, waiting until server is ready for connections. forked process: 2702 ERROR: child process failed, exited with error number 1

Каталог /var/run/mongodb не существует, поэтому я создал и назначил его пользователю mongod. К сожалению, это не имело большого значения.

My /var/log/mongodb/mongod.log показывает это сообщение:

[initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /var/lib/mongo/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

Ответы

Ответ 1

Что работало для меня на Fedora 20: нам нужно создать временную директорию при каждой загрузке и обрабатывать systemd-tmpfiles. Итак, создайте файл /lib/tmpfiles.d/mongodb.conf и поместите в него одну строку:

d /var/run/mongodb 0755 mongod mongod

Кажется, что он справляется с перезагрузкой; если вы не хотите перезапускать сразу, вы можете выполнить это с помощью:

sudo systemd-tmpfiles --create mongodb.conf

(см. справочные страницы для файлов systemd-tmp)

Ответ 2

У меня такая же проблема, я решил ее временно, отключив SELinux, перезагрузил машину, исключил mongod.lock:

#rm /var/lib/mongo/mongod.lock

Создав файл /var/run/mongodb/mongo.pid(как указано в файле конфигурации /etc/mongod.conf):

#mkdir /var/run/mongodb
#touch /var/run/mongodb/mongod.pid

и дает 777 разрешений:

#chmod 777 /var/run/mongodb/mongod.pid 

и начало mongo:

#service mongod start

Но проблема сохраняется после перезагрузки машины. Папка и файл исчезнут.

Ответ 3

Я потратил некоторое время на это, и кажется, что папка pid и права доступа к файлу не работают с демонами по умолчанию.

Самое простое решение, с которым я столкнулся, - отключить файл pid, просто поместив # перед строкой в ​​файле конфигурации.

vi /etc/mongod.conf

найдите строку, которая говорит pidfilepath =/var/run/mongodb/mongod.pid и соответствующим образом измените ее.

# pidfilepath=/var/run/mongodb/mongod.pid

Информацию о том, что комментирует это, можно проверить здесь. http://docs.mongodb.org/manual/reference/configuration-options/#processManagement.pidFilePath

Ответ 4

Если вы запускаете mongod в качестве службы, используя:

sudo service mongod start

Убедитесь, что каталоги, определенные для путей журнала, dbpath и pidfilepath в вашем mongod.conf, существуют и принадлежат mongod: mongod.

Ответ 5

У меня была такая же проблема с запуском mongodb 3.0.4 на OpenSuse 13.2, и я обнаружил, что каталог mongod в /var/run отсутствует. Если я создам каталог вручную, он исчезнет после перезагрузки.

Я решил это, добавив следующие строки в мой запуск /etc/init.d/mongod script:

mkdir -p /var/run/mongod  
chown $MONGO_USER:$MONGO_GROUP /var/run/mongod

Ответ 6

Нам нужно создать расположение temp dir pidfile /var/run/mongodb, которое обрабатывается systemd-tmpfiles. Итак, создайте файл /lib/tmpfiles.d/mongodb.conf как root:

lnx # > sudo su
lnx # > cd/lib/tmpfiles.d
lnx # > echo "d/var/run/mongodb 0755 mongod mongod" > mongodb.conf

Затем перезагрузите или запустите эту команду, чтобы активировать этот каталог temp:

lnx # > sudo systemd-tmpfiles --create mongodb.conf

Запустите службу mongod:

lnx # > sudo systemctl start mongod.service

Библиография: Fedora And Mongodb · l33tsource http://goo.gl/XzgSDd

Ответ 7

я встретил ту же проблему, когда я изменяю свой mongod.conf следующим образом и проблема решена.

port=27017
dbpath=/usr/local/mongodb/data/db/
logpath=/usr/local/mongodb/logs
fork = true

tips: logpath - это файл журнала, а не папка.

Ответ 8

Я просто испытываю подобную проблему на ubuntu. Обнаружены почти все советы ERROR, например

child process failed, exited with error number 1

или child process failed, exited with error number 100

или [signalProcessingThread] got signal 2 (Interrupt: 2), will terminate after current cmd ends

Много раз я удаляю Mongodb и пытаюсь установить его снова, но проблема остается...

Наконец, я пришел к такому пути: Сначала создайте резервную копию данных, затем удалите Mongodb с помощью

#sudo apk-get autoremove mongodb-org

Узнайте все файлы, связанные с mongodb:

/#find -name mongo*

Удалите их все с помощью "rm" или "rmdir", включая пакеты в /var/cache/... и everthing.

Затем повторите установку как первый раз:

#echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
#sudo apt-get update
#sudo apt-get install -y mongodb-org

Он снова запустится.

Ответ 9

Комментарий ниже строки из вашего файла "mongo.conf".

pidfilepath =/вар/запуска/MongoDB/mongod.pid