web-dev-qa-db-fra.com

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

Cela fait un certain temps que je gère les installations de serveurs, à la fois sous Ubuntu et sous une autre forme. Je suis assez habitué à /etc/init.d/ 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 avec /etc/init.d/ et quelle est la différence entre service et /etc/init.d/?

113
Marco Ceppi

Les scripts /etc/init.d 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 scripts /etc/init.d par des scripts upstart (dans /etc/init).

service permet la transition en douceur des scripts /etc/init.d aux scripts ultérieurs. À 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.

103
txwikinger

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

service exécute un script dans un environnement prévisible (le répertoire de travail est/et seules 2 variables d’environnement sont définies: LANG et TERM). Il ajoute également la possibilité 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 les 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 :)

28
Joe Marty