Exécutez le service MongoDB en tant que démon de SystemD sur Ubuntu 15.10

12

MongoDB prend uniquement en charge les versions de prise en charge à long terme d'Ubuntu (LTS). Le dernier est Ubuntu 14.04 LTS, où le processus d'initialisation est géré par Upstart, propriétaire de Canonical. Cependant, j'utilise Ubuntu 15.10 avec le processus d'initialisation SystemD standard de Linux. Je ne peux donc pas démarrer le service MongoDB au démarrage.

Lorsque je lis l'état du service ou que j'essaie de le démarrer, affiche le message "Échec du chargement":

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

J'exécute l'édition communautaire officielle de MongoDB 3.2 (mongodb-org) à partir de https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/ et non le méta-package MongoDB 2.6 (mongodb) d'Ubuntu dépôt.

> 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

Quelqu'un sait comment démarrer le MongoDB avec SystemD?

Fernando Santucci
la source
1
mon problème était un fichier de configuration personnalisé qui ne bifurquait pas sur mongod, voici l'extrait de la conf mongod par défaut qui me manquait, processManagement: fork: true pidFilePath: /var/run/mongod.pid
Pykler

Réponses:

25

J'ai réussi à démarrer le service MongoDB avec SystemD au démarrage:

J'ai désinstallé le méta-package officiel (mongodb-org) v3.2, puis j'ai installé le méta-package (mongodb) v2.6 du référentiel Ubuntu:

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

Créez le fichier de configuration du service comme indiqué ci-dessous:

> 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

Vérifiez dans la liste si le service est activé ou désactivé à l'aide de la commande ci-dessous:

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

S'il est désactivé ou non dans la liste, activez-le:

> sudo systemctl enable mongodb.service

Revérifier:

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

Vous pouvez maintenant gérer le service sur le processus d'initialisation SystemD:

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

Prendre plaisir!

Fernando Santucci
la source
Voir askubuntu.com/a/617869/43344 pour un pointeur sur les parties de la définition de service que vous avez manquées. Notez également que les unités de service fournies et écrites par l'administrateur local ne doivent pas entrer /lib.
JdeBP
1
Cette unité de service a été écrite par Canonical, pas par un administrateur local, alors ils doivent résider dans le /lib. Les parties de la définition de service sont suffisamment bonnes pour démarrer le service, les paramètres supplémentaires n'ont pas d'effet significatif, ils sont donc considérés comme complémentaires. Si vous ajoutez la PIDFile=/var/run/mongodb/mongod.pidligne et l' runinstruction en ExecStart=ligne, vous obtenez une erreur, car j'utilise le méta-package (mongodb) 2.6, pas le méta-package (mongodb-org) 3.2.
Fernando Santucci
1
Pourquoi voté contre, j'ai voté. J'ai également rencontré un problème similaire et cette réponse a aidé, merci.
Tien Do
Cela a été super utile de passer d'Ubuntu 14 à 18, mon seul ajout serait que je devais recréer les répertoires de données et de journaux et chownles avant que mongod ne démarre via systemctl. Rien que les docs d'installation ne m'auraient dit mais au cas où cela serait utile!
Tom J Nowell
6

Lors de l'installation par défaut à partir du référentiel MongoDB, afin d'avoir un démarrage automatique du service mongod , il vous suffit d'activer le service system.d:

systemctl enable mongod.service(faites attention au nom du service mongo d , pas à mongodb )

REMARQUE: ceci est testé sur Debian / GNU Jessie 8.x avec systemd et Ubuntu Xerus 16.04 LTS.

stamster
la source
Cela vaut également pour Ubuntu Xerus 16.04 LTS. Après l'installation à partir du référentiel officiel, vous devez activer l'unité de service systemd! Je viens de le confirmer avec une autre installation d'instance ... :)
stamster
1
Le fichier est présent dans /lib/systemd/system/mongod.servicemon Ubuntu 16.04
Jyotman Singh
Oui, la définition d'unité systemd est là mais elle est désactivée, vous devez donc l'activer afin qu'elle démarre automatiquement à chaque redémarrage de votre instance.
stamster