Como escolho o caminho para ativar / desativar, iniciar / parar ou verificar o status de um serviço?

7

Se eu quiser iniciar um serviço instalado no sistema, posso fazer:

# /etc/init.d/some-svc start
# initctl start some-svc
# service some-svc start
# start some-svc

Se eu quiser desativar a execução de um serviço na inicialização, posso fazer isso:

# rm /etc/rc2.d/S99some-svc
# update-rc.d some-svc disable
# mv /etc/init/some-svc.conf /etc/init/some-svc.conf.disabled

Depois, há várias coisas que eu posso fazer para habilitar serviços para iniciar na inicialização e assim por diante.

Eu estou ciente do fato de que o upstart é uma coisa (relativamente) nova, e eu sei como o init do SysV costumava funcionar, e estou vagamente ciente de um monte de bobagens do D-Bus, mas o que eu não faço sabe como é que se pretende realmente interagir com estas coisas. Por exemplo, não sei como determinar facilmente se um serviço é um trabalho do Upstart ou um legado do SysV, sem ler a fonte de seus scripts de shell extensivamente.

Então: se eu quiser iniciar ou interromper um serviço, seja no momento ou persistentemente, quais dessas ferramentas devo usar e por quê? Se a resposta depende de algum atributo (como "este serviço suporta upstart"), então como eu rapidamente e facilmente aprendo sobre esse atributo de um pacote instalado?

Existem ferramentas de interface de usuário que podem interagir de forma segura e correta com a infra-estrutura de serviço moderna (upstart e / ou qualquer que seja sua compatibilidade com sysv)? Por exemplo, eu poderia usar com segurança sysv-rc-conf para determinar quais serviços devem ser iniciados?

    
por Glyph 11.10.2012 / 07:01

1 resposta

9

Funcionalmente, não há diferença entre qualquer um desses métodos de invocação.

start e stop são links simbólicos para o initctl. service é um script de shell que determina se deve executar o script de inicialização ou usar o initctl.

A maneira mais simples de ver o que é um trabalho do Upstart é dar uma olhada em /etc/init/ . Tudo lá é um trabalho do Upstart. Se você ls -l /etc/init.d/ , verá todos os serviços e tarefas do sistema. Os trabalhos init do SysV serão arquivos reais, enquanto os jobs Upstart serão links simbólicos para /lib/init/upstart-job , que invocarão corretamente o trabalho Upstart.

Em outras palavras, você também pode invocar os jobs do Upstart chamando, por exemplo, /etc/init.d/apport restart , embora a saída sugira usar service, start ou stop.

Então, na prática, não faz diferença (ainda!). Mas se eu escrevesse algo, certamente usaria o serviço, começaria ou pararia, já que quase não haveria nenhuma chance de ser reprovado, ao passo que os serviços de chamada por meio do /etc/init.d/ poderiam desaparecer (embora provavelmente não a qualquer momento em breve).

Uma nota sobre a desabilitação de serviços: renomear o arquivo .conf funciona, mas não o recomendo. Você pode desativar um serviço dessa maneira, mas se houver uma atualização de pacote disponível, o dpkg copiará uma cópia nova do trabalho do Upstart e, sem a intenção, o serviço será ativado novamente. A maneira correta de desabilitar um trabalho do Upstart é usar um arquivo .override que deixa o trabalho original intacto. / p>

Por exemplo, para desativar o apport, basta criar um arquivo chamado /etc/init/apport.override que contenha a palavra "manual".

# echo "manual" > /etc/init/apport.override

Pessoalmente, evito usar sysv-rc-conf . Pode ser seguro o suficiente para usá-lo para modificar os trabalhos do SysV, mas não tenho certeza; parece não suportar os trabalhos do Upstart, e não há como dizer a interface que é qual. Eu ficaria com update-rc.d para gerenciar scripts SysV.

Para mais informações sobre o Upstart, consulte:

  1. O Cookbook Upstart: link
  2. O comando man 5 init : link
por Mark Russell 18.10.2012 / 17:48