¿Cuál es la diferencia entre "Servicio" y "/etc/init.d/"?

113

He estado administrando las instalaciones del servidor dentro y fuera del sabor de Ubuntu durante algún tiempo, me he acostumbrado bastante /etc/init.d/para reiniciar los servicios. Ahora recibo este mensaje:

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

Esto parece haberse producido en el último LTS de Ubuntu, ¿por qué? ¿Qué tiene de malo /etc/init.d/y qué / hay una diferencia entre servicey /etc/init.d/?

Marco Ceppi
fuente
3
El Upstart Cookbook contiene una buena explicación de lo racional para el cambio.
ændrük

Respuestas:

103

/etc/init.dlos guiones son la vieja forma de hacer las cosas. Vienen del estándar del Sistema V. Sin embargo, esos scripts se disparan solo en una secuencia particular, por lo que no se pueden establecer dependencias reales.

Por lo tanto, upstart se ha desarrollado con la intención de sustituir todos los /etc/init.dscripts por scripts de inicio (in /etc/init).

servicepermite la transición fluida de /etc/init.dguiones a guiones iniciales. En el futuro, cuando se transfieran más y más scripts a la fase inicial, el servicio seguirá funcionando porque encuentra ambas posibilidades.

txwikinger
fuente
66
Upstart se eliminará ahora, ¿verdad?
usuario incorrecto
66
systemd reemplazará el arranque una vez que los planes estén en su lugar - 14.04 LTS usará el arranque. Esto fue anunciado por Mark Shuttleworth , en una publicación titulada Perdiendo gentilmente
no un parche el
28

Consulte también la página del manual para el comando de servicio: man service

serviceejecuta un script en un entorno predecible (el directorio de trabajo es / y solo se establecen 2 variables de entorno: LANG y TERM). También agrega la capacidad de hacer --full-restart. Así que para resumir:

  1. service puede ejecutar scripts desde / etc / init o /etc/init.d (upstart o System V)
  2. service ejecuta scripts en un entorno predecible.

El aspecto "entorno predecible" puede causarle problemas si su script depende de una variable de entorno por algún motivo. Probablemente haya una forma de evitarlo, pero no sé qué es, y eso está más allá del alcance de esta pregunta :)

Joe Marty
fuente
2
Hola @ Joe Marty, este es exactamente el problema que estoy experimentando ahora. Tengo un servicio que se retransmite en una variable de entorno "DISPLAY" que no está presente al iniciar el daemon con "service myservice start" pero está presente cuando se inicia con "/etc/init.d/myservice start". ¿Alguna idea sobre cómo tener esta variable disponible?
frandevel