Ejecute el servicio MongoDB como demonio de SystemD en Ubuntu 15.10

12

MongoDB solo admite versiones de Ubuntu Long Term Support (LTS). El último es Ubuntu 14.04 LTS, donde el proceso de inicio es administrado por Upstart, propiedad de Canonical. Sin embargo, estoy usando Ubuntu 15.10 con el proceso de inicio SystemD estándar de Linux. Entonces no puedo iniciar el servicio MongoDB en el arranque.

Cuando leo el estado del servicio o intento iniciarlo, muestro el mensaje "no se pudo cargar":

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

Estoy ejecutando la edición oficial de la comunidad MongoDB 3.2 (mongodb-org) desde https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/ no el meta-paquete MongoDB 2.6 (mongodb) de Ubuntu repositorio.

> 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

Alguien sabe cómo iniciar MongoDB con SystemD?

Fernando Santucci
fuente
1
mi problema era un archivo de configuración personalizado que no estaba bifurcando mongod, aquí está el fragmento de la configuración predeterminada de mongod que me faltaba, processManagement: fork: true pidFilePath: /var/run/mongod.pid
Pykler

Respuestas:

25

Logré iniciar el servicio MongoDB con SystemD en el arranque:

Desinstalé el metapaquete oficial (mongodb-org) v3.2, luego instalé el metapaquete (mongodb) v2.6 del repositorio de Ubuntu:

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

Cree el archivo de configuración del servicio como se muestra a continuación:

> 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

Verifique en la lista si el servicio está habilitado o deshabilitado con el siguiente comando:

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

Si está deshabilitado o no en la lista, habilítelo:

> sudo systemctl enable mongodb.service

Revisar otra vez:

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

Ahora puede administrar el servicio en el proceso de inicio de SystemD:

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

¡Disfrutar!

Fernando Santucci
fuente
Consulte askubuntu.com/a/617869/43344 para obtener un puntero a las partes de la definición del servicio que se perdió. También tenga en cuenta que las unidades de servicio suministradas y escritas por el administrador local no deben entrar /lib.
JdeBP
1
Esa unidad de servicio fue escrita por Canonical, no por un administrador local, entonces deben residir en el /lib. Las partes de la definición del servicio son lo suficientemente buenas como para iniciar el servicio, las configuraciones adicionales no tienen un efecto significativo, por lo que se consideran complementarias. Si agrega la PIDFile=/var/run/mongodb/mongod.pidlínea y las runinstrucciones en ExecStart=línea, obtendrá un error, porque estoy usando el metapaquete 2.6 (mongodb), no el metapaquete 3.2 (mongodb-org).
Fernando Santucci
1
Por qué votó en contra, voté a favor. También enfrenté un problema similar y esta respuesta me ayudó, gracias.
Tien Do
Esto fue muy útil para pasar de Ubuntu 14 a 18, mi única adición sería que tuve que volver a crear los datos y los directorios de registro chownantes de que mongod comenzara a través de systemctl. Nada que los documentos de instalación no me hubieran dicho, pero en caso de que sea útil.
Tom J Nowell
6

En la instalación predeterminada desde el repositorio MongoDB, para tener un inicio automático del servicio mongod , todo lo que necesita hacer es habilitar el servicio system.d:

systemctl enable mongod.service(preste atención al nombre del servicio mongo d , no mongodb )

NOTA: esto se prueba en Debian / GNU Jessie 8.x con systemd y Ubuntu Xerus 16.04 LTS.

Stamster
fuente
Esto también es válido para Ubuntu Xerus 16.04 LTS. ¡Después de instalar desde el repositorio oficial, debe habilitar la unidad de servicio systemd! Lo acabo de confirmar con otra instalación de instancia ... :)
stamster
1
El archivo está presente en /lib/systemd/system/mongod.servicemi Ubuntu 16.04
Jyotman Singh
Sí, la definición de la unidad systemd está ahí pero está deshabilitada, por lo que debe habilitarla para que se inicie automáticamente cada vez que reinicie su instancia.
stamster