it-swarm-pt.tech

Qual é a diferença entre "Service" e "/etc/init.d/"?

Eu venho gerenciando instalações de servidores dentro e fora do Ubuntu há algum tempo - eu me tornei bastante ajustado para /etc/init.d/ para reiniciar servcies. Agora eu recebo esta mensagem:

[email protected]:~# /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

Isso parece ter sido trazido no último LTS do Ubuntu - por quê? O que há de tão ruim em /etc/init.d/ e qual/existe diferença entre service e /etc/init.d/?

111
Marco Ceppi

/etc/init.d scripts são a maneira antiga de fazer as coisas. Eles vêm do padrão System V. No entanto, esses scripts são acionados apenas em uma sequência específica, portanto, nenhuma dependência real pode ser estabelecida.

Portanto, o upstart foi desenvolvido com a intenção de substituir todos os scripts /etc/init.d por scripts upstart (em /etc/init).

service permite a transição suave de scripts /etc/init.d para upstart scripts. No futuro, quando mais e mais scripts forem transferidos para o upstart, o serviço continuará funcionando, pois encontrará as duas possibilidades.

102
txwikinger

Verifique também a página man do comando de serviço: man service

service executa um script em um ambiente previsível (o diretório de trabalho é/e apenas duas variáveis ​​de ambiente são configuradas: LANG e TERM). Também adiciona a capacidade de executar --full-restart. Entao, para resumir:

  1. service pode executar scripts de/etc/init ou /etc/init.d (upstart ou System V)
  2. service executa scripts em um ambiente previsível.

O aspecto "ambiente previsível" pode causar problemas se o seu script depender de uma variável de ambiente por algum motivo. Provavelmente há uma maneira de contornar isso, mas eu não sei o que é, e isso está além do escopo desta questão :)

27
Joe Marty