Confus au sujet de «/etc/init.d» et des services dans «/ lib / systemd / system»

15

Je suis complètement nouveau dans le monde Linux, donc désolé pour tout ce que je peux dire de mal.

J'essaie d'exécuter une base de données Mongo sur une machine Debian 8.5. Lorsque j'ai installé le package (pré-construit à partir de percona.com), j'ai remarqué les fichiers suivants:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

À propos de /etc/init.d/mongod

Je comprends que cela est appelé (tant qu'il est enregistré via update-rc.d) au démarrage / dans d'autres états du système particulier (je ne veux pas être technique à ce sujet, j'absorbe beaucoup d'informations et cela semble moins important).

C'est parfaitement bien pour moi. Le script fait beaucoup d'initialisation et lance enfin le démon mongo. Il semble avoir des «déclencheurs» pour démarrer, arrêter, redémarrer, etc. et pour autant que je sache, je peux déclencher ceux avec sudo service mongod <action>.

À propos de /lib/systemd/system/mongod.service

Ce fichier semble faire la même chose (c'est-à-dire exécuter mongo), mais avec moins de configuration, une seule ligne dans le paramètre ExecStart:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

Autant que je sache, cela peut être déclenché avec sudo systemctl start mongod.

  • Je ne comprends pas si cela est appelé au démarrage ou non.

  • Je ne comprends pas pourquoi le besoin de deux de ces fichiers «service», et comment puis-je m'en débarrasser (peut-être celui de / lib / systemd, car il est beaucoup plus simple).

  • Je ne comprends pas s'il y a une relation entre les deux.

  • J'ai lu que cela systemctlfonctionne aussi sur les init.dscripts, et dans ce cas, je ne comprends pas lequel des deux fichiers sera déclenché systemctl mongod start.

Je pense qu'il y a une redondance et je ne devrais choisir qu'une seule des deux façons. Et je veux être sûr que c'est

  • appelé au démarrage
  • appelable par commande (comme serviceou systemctl).

Pourriez-vous m'aider à vider mon esprit? Avec l'aide de quelques commentaires, je peux probablement me concentrer et affiner la question.

natario
la source

Réponses:

12

Lorsque vous disposez à la fois d'un init.dscript et d'un .servicefichier systemd du même nom, systemd utilise le fichier de service pour toutes les opérations. Je crois que la servicecommande redirigera simplement vers systemd. Le script init.d sera ignoré.

Utilisez systemd. C'est nouveau dans Debian 8, mais c'est la valeur par défaut. Les fichiers de service Systemd sont censés être plus simples que les scripts init.d. Vous n'avez mentionné aucune fonctionnalité spécifique dont vous avez besoin qui n'est pas prise en charge par le service systemd.

Si le fichier de service n'était pas inclus, systemdutiliserait volontiers le script init.d. Le développeur du paquet mongod vous dit qu'il pense que cette définition systemd est meilleure :).

Regardez la sortie de systemctl status mongod. Si le service est activé pour être démarré au démarrage, la Loaded:ligne affichera "activé". Sinon, vous pouvez utiliser systemctl enable mongod. Vous pouvez également inclure l'option --now, et cela démarrera mongod en même temps.

sourcejedi
la source
Je vous remercie! Je vais étudier systemd et éventuellement l'utiliser. Pour l'instant, je voulais désactiver cela et enfin exécuter le script init.d sur lequel je travaillais. Je suis allé systemctl disable mongod:; puis renommé mongod.service en mongod-backup.service; alors systemctl daemon-reload. Pensez-vous que c'était correct? J'ai lu que vous ne devriez pas modifier les fichiers dans / lib / systemd / system /, mais sans renommer, systemctl a continué d'ignorer le script init.d.
natario
Les fichiers dans / lib / systemd ne sont pas des conffiles. Je ne peux vraiment pas recommander l'installation d'un paquet Debian et la modification de ses fichiers (et plus tard la mise à jour du paquet). Au lieu de cela, vous devez renommer le script init.d sur lequel vous "travaillez" (vraisemblablement en modifiant?). Les scripts init.d sont généralement des conffiles. Si une mise à jour modifie un conffile (ce qui ne devrait pas avoir de raison), elle vous avertira en premier. Dans ce cas, je m'attends à ce qu'il vous avertisse si une version mise à jour du script init.d supprimé (effectivement) est devenue disponible.
sourcejedi
Il est possible que vous deviez ajouter des dépendances de commande à votre nouveau service, aux services qui en dépendent mongod. Il est également possible que vous deviez supprimer certaines dépendances strictes, mais je ne l'aurais pas pensé. Un moyen sûr de modifier les services concernés consiste à les copier /etc/systemd/system/et à modifier la copie.
sourcejedi
En général, je pense que s'en tenir à systemd est plus simple. Vous étudiez maintenant bash, les fonctions-init et back-compat caractéristiques de systemd. Comme vous n'apprenez pas un système d'initialisation SysV pur, si vous utilisez un tel système, vous risquez de vous attendre à des fonctionnalités qui proviennent réellement de systemd.
sourcejedi