Запустите сервис MongoDB как демон SystemD в Ubuntu 15.10

12

MongoDB просто поддерживает версии Ubuntu Long Term Support (LTS). Последним является Ubuntu 14.04 LTS, где процессом инициализации управляет компания Upstart, принадлежащая Canonical. Однако я использую Ubuntu 15.10 со стандартным процессом инициализации Linux в SystemD. Поэтому я не могу запустить сервис MongoDB при загрузке.

Когда я читаю статус службы или пытаюсь запустить ее, отображается сообщение «Не удалось загрузить»:

> systemctl status mongod
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
> sudo systemctl start mongod
Failed to start mongod.service: Unit mongod.service failed to load: No such file or directory.

Я использую официальный выпуск MongoDB 3.2 Community Edition (mongodb-org) с https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/, а не метапакет MongoDB 2.6 (mongodb) из Ubuntu. репозиторий.

> sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
> echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
> sudo apt-get update
> sudo apt-get install -y mongodb-org

Кто-то знает, как запустить MongoDB с SystemD?

Фернандо Сантуччи
источник
1
моей проблемой был пользовательский конфигурационный файл, который не разветвлял mongod, вот фрагмент из конф. mongod по умолчанию, который мне не хватало, processManagement: fork: true pidFilePath: /var/run/mongod.pid
Pykler

Ответы:

25

Мне удалось запустить сервис MongoDB с SystemD при загрузке:

Я удалил официальный метапакет (mongodb-org) v3.2, затем установил метапакет (mongodb) v2.6 из репозитория Ubuntu:

> sudo apt-get remove mongodb-org
> sudo apt-get install mongodb

Создайте файл конфигурации службы, как показано ниже:

> cd /lib/systemd/system
> sudo touch mongodb.service
> sudo nano mongodb.service
[Unit]
Description=An object/document-oriented database
Documentation=man:mongod(1)
After=network.target

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongodb.conf

[Install]
WantedBy=multi-user.target

Проверьте в списке, включена ли служба или отключена, используя команду ниже:

> systemctl list-unit-files --type=service
...
mongodb.service             disabled
...

Если он отключен или отсутствует в списке, включите его:

> sudo systemctl enable mongodb.service

Проверить снова:

> systemctl list-unit-files --type=service 
...
mongodb.service             enabled
...

Теперь вы можете управлять службой в процессе инициализации SystemD:

> systemctl status mongodb
> sudo systemctl stop mongodb
> sudo systemctl start mongodb
> sudo systemctl restart mongodb

Наслаждайтесь!

Фернандо Сантуччи
источник
Обратитесь к askubuntu.com/a/617869/43344 за указателем на части определения службы, которые вы пропустили. Также обратите внимание, что единицы обслуживания, поставленные и написанные местным администратором, не должны входить /lib.
JdeBP
1
Этот сервисный отдел был написан Canonical, а не местным администратором, поэтому они должны находиться в /lib. Части определения сервиса достаточно хороши для запуска сервиса, дополнительные настройки не оказывают существенного влияния, поэтому они считаются дополнительными. Если вы добавите PIDFile=/var/run/mongodb/mongod.pidстроку и runинструкцию в ExecStart=строке, вы получите ошибку, потому что я использую метапакет (mongodb) 2.6, а не метапакет (mongodb-org) 3.2.
Фернандо Сантуччи
1
Почему проголосовали, я проголосовал. Я также столкнулся с подобной проблемой, и этот ответ помог, спасибо.
Тянь-До
Это был очень полезный переход с Ubuntu 14 на 18, мое единственное добавление состояло в том, что мне нужно было воссоздать каталоги данных и журналов и chownих, прежде чем mongod запустится через systemctl. Ничего, что установочные документы не сказали бы мне, но в случае, если это полезно!
Том J Ноуэлл
6

При установке по умолчанию из репозитория MongoDB, для автоматического запуска службы mongod все, что вам нужно сделать, это включить службу system.d:

systemctl enable mongod.service(обратите внимание на название сервиса mongo d , а не mongodb )

ПРИМЕЧАНИЕ: это тестируется как на Debian / GNU Jessie 8.x с systemd, так и на Ubuntu Xerus 16.04 LTS.

stamster
источник
Это относится и к Ubuntu Xerus 16.04 LTS. После установки из официального репо, вам нужно включить системный сервисный модуль! Я только что подтвердил это с установкой другого экземпляра ... :)
Stamster
1
Файл присутствует в /lib/systemd/system/mongod.serviceмоем Ubuntu 16.04
Jyotman Singh
Да, определение модуля systemd есть, но оно отключено, поэтому вам нужно включить его, чтобы он автоматически запускался при каждой перезагрузке вашего экземпляра.
stamster