Quelle est la différence entre «Service» et «/etc/init.d/»?

113

Je gère les installations de serveurs à la fois sur et hors Ubuntu. Cela fait un certain temps déjà que je suis assez à l' /etc/init.d/aise pour redémarrer les services. Maintenant je reçois ce message:

root@tatooine:~# /etc/init.d/mysql status
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql status

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the status(8) utility, e.g. status mysql
mysql start/running, process 14048

Cela semble avoir été mis en place dans le dernier LTS d'Ubuntu - pourquoi? Quel est le problème /etc/init.d/et quelle est la différence entre serviceet /etc/init.d/?

Marco Ceppi
la source
3
Le livre de cuisine Upstart contient une bonne explication de la raison du changement.
ændrük

Réponses:

103

/etc/init.dles scripts sont l'ancienne façon de faire les choses. Ils viennent de la norme System V. Cependant, ces scripts ne sont déclenchés que dans une séquence particulière, aucune dépendance réelle ne peut donc être établie.

Par conséquent, upstart a été développé dans le but de remplacer tous les /etc/init.dscripts par des scripts upstart (in /etc/init).

servicepermet la transition en douceur des /etc/init.dscripts aux scripts parvenus. À l'avenir, lorsque de plus en plus de scripts seront transférés vers Upstart, le service fonctionnera toujours car il détectera les deux possibilités.

txwikinger
la source
6
Upstart va être éliminé maintenant, non?
Pseudonyme
6
systemd remplacera les programmes parvenus une fois les plans en place - 14.04 LTS utilisera les programmes parvenus. Cela a été annoncé par Mark Shuttleworth , dans un post intitulé " Perdre gracieusement
pas un correctif"
28

Consultez également la page de manuel relative à la commande de service: man service

serviceexécute un script dans un environnement prévisible (le répertoire de travail est / et seules deux variables d’environnement sont définies: LANG et TERM). Cela ajoute aussi la capacité de faire --full-restart. Pour résumer:

  1. service peut exécuter des scripts depuis / etc / init ou /etc/init.d (upstart ou System V)
  2. service exécute des scripts dans un environnement prévisible.

L'aspect "environnement prévisible" peut vous causer des problèmes si votre script dépend d'une variable d'environnement pour une raison quelconque. Il y a probablement un moyen de contourner cela, mais je ne sais pas ce que c'est, et cela dépasse le cadre de cette question :)

Joe Marty
la source
2
Bonjour @ Joe Marty, C'est exactement le problème que je teste maintenant. J'ai un service qui repose sur une variable d'environnement "DISPLAY" qui n'est pas présente lors du démarrage du démon avec "service myservice start" mais présente lors du démarrage avec "/etc/init.d/myservice start". Avez-vous une idée sur la façon de disposer de cette variable?
Frandevel