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

113

Estou gerenciando instalações de servidor dentro e fora do sabor do Ubuntu há algum tempo - me adaptei bastante /etc/init.d/para reiniciar os serviços. Agora recebo esta mensagem:

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

Isso parece ter sido causado no mais recente LTS do Ubuntu - por quê? O que há de tão ruim /etc/init.d/e o que / há uma diferença entre servicee /etc/init.d/?

Marco Ceppi
fonte
3
O Upstart Cookbook contém uma boa explicação sobre o racional para alternar.
ændrük

Respostas:

103

/etc/init.dscripts são a maneira antiga de fazer as coisas. Eles vêm do padrão System V. No entanto, esses scripts são disparados 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 /etc/init.dscripts por scripts iniciados (in /etc/init).

servicepermite a transição suave de /etc/init.dscripts para scripts iniciais. No futuro, quando mais e mais scripts forem transferidos para o inicio, o serviço continuará funcionando porque encontra as duas possibilidades.

txwikinger
fonte
6
O iniciante será eliminado agora, certo?
wrongusername
6
O systemd substituirá o inicial assim que os planos estiverem em vigor - 14.04 O LTS usará o inicial. O anúncio foi feito por Mark Shuttleworth , em um post intitulado Perder graciosamente
não um patch
28

Verifique também a página de manual para o comando service: man service

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

  1. service pode executar scripts a partir de / etc / init ou /etc/init.d (inicial 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 existe uma maneira de contornar isso, mas eu não sei o que é, e isso está além do escopo desta pergunta :)

Joe Marty
fonte
2
Oi @ Joe Marty, Este é exatamente o problema que estou experimentando agora. Eu tenho um serviço que retransmite em uma variável de ambiente "DISPLAY" que não está presente ao iniciar o daemon com "service myservice start", mas está presente ao iniciá-lo com "/etc/init.d/myservice start". Alguma idéia de como ter essa variável disponível?
Frandevel 11/02/16