Служба 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