Uruchom usługę MongoDB jako demon SystemD na Ubuntu 15.10

12

MongoDB obsługuje tylko wersje Ubuntu Long Term Support (LTS). Ostatnim jest Ubuntu 14.04 LTS, gdzie procesem inicjowania zarządza Upstart, firma Canonical. Jednak używam Ubuntu 15.10 ze standardowym procesem inicjalizacji SystemD w Linuksie. Nie mogę więc uruchomić usługi MongoDB podczas rozruchu.

Kiedy czytam status usługi lub próbuję go uruchomić, wyświetlam komunikat „nie można załadować”:

> 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.

Używam oficjalnej wersji MongoDB 3.2 Community Edition (mongodb-org) z https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/, a nie meta-pakietu MongoDB 2.6 (mongodb) z Ubuntu magazyn.

> 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

Ktoś wie, jak uruchomić MongoDB z SystemD?

Fernando Santucci
źródło
1
moim problemem był niestandardowy plik konfiguracyjny, który nie rozwiązywał mongod, oto fragment domyślnego mongod conf, którego mi brakowało, processManagement: fork: true pidFilePath:
/var/run/mongod.pid

Odpowiedzi:

25

Udało mi się uruchomić usługę MongoDB z SystemD przy rozruchu:

Odinstalowałem oficjalny meta-pakiet (mongodb-org) v3.2, a następnie zainstalowałem meta-pakiet (mongodb) v2.6 z repozytorium Ubuntu:

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

Utwórz plik konfiguracji usługi, jak pokazano poniżej:

> 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

Sprawdź na liście, czy usługa jest włączona, czy wyłączona za pomocą poniższego polecenia:

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

Jeśli jest wyłączone lub nie ma go na liście, włącz:

> sudo systemctl enable mongodb.service

Sprawdź ponownie:

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

Teraz możesz zarządzać usługą w procesie inicjalizacji SystemD:

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

Cieszyć się!

Fernando Santucci
źródło
Zobacz askubuntu.com/a/617869/43344, aby znaleźć wskaźnik do części definicji usługi, które przegapiłeś. Należy również pamiętać, że jednostki serwisowe dostarczone i napisane przez lokalnego administratora nie powinny wchodzić /lib.
JdeBP,
1
Ta jednostka usługowa została napisana przez firmę Canonical, a nie przez lokalnego administratora, wówczas muszą oni znajdować się w /lib. Części definicji usługi są wystarczająco dobre, aby uruchomić usługę, dodatkowe ustawienia nie mają znaczącego wpływu, więc są uważane za komplementarne. Jeśli dodasz PIDFile=/var/run/mongodb/mongod.pidwiersz i runinstrukcję on- ExecStart=line, pojawi się błąd, ponieważ używam (mongodb) meta-pakietu 2.6, a nie (mongodb-org) meta-pakietu 3.2.
Fernando Santucci
1
Dlaczego głosowałem w dół, głosowałem. Napotkałem również podobny problem i ta odpowiedź pomogła, dzięki.
Tien Do
To było bardzo pomocne przejście z Ubuntu 14 na 18, moim jedynym dodatkiem było to, że musiałem odtworzyć dane i katalogi dziennika i chownje zanim mongod zacznie się przez systemctl. Nic nie powiedziałoby mi dokumenty instalacyjne, ale na wypadek, gdyby było to pomocne!
Tom J Nowell
6

W przypadku domyślnej instalacji z repozytorium MongoDB, w celu automatycznego uruchomienia usługi mongod , wystarczy włączyć usługę system.d:

systemctl enable mongod.service(zwróć uwagę na nazwę usługi mongo d , a nie mongodb )

UWAGA: jest to testowane zarówno na Debianie / GNU Jessie 8.x z systememd i Ubuntu Xerus 16.04 LTS.

stamster
źródło
Dotyczy to również Ubuntu Xerus 16.04 LTS. Po instalacji z oficjalnego repozytorium musisz włączyć systemową jednostkę serwisową! Właśnie to potwierdziłem przy pomocy kolejnej instalacji instancji ... :)
stamster,
1
Plik jest obecny w /lib/systemd/system/mongod.servicemoim Ubuntu 16.04
Jyotman Singh
Tak, zdefiniowano systemową definicję jednostki, ale jest ona wyłączona, więc musisz ją włączyć, aby była automatycznie uruchamiana przy każdym ponownym uruchomieniu instancji.
stamster