Ubuntu12.04: Como desativar um processo daemon na inicialização


23

Normalmente, uso service start/stopou initctl start/stoppara iniciar ou interromper um processo de daemon, mas agora o que estou procurando é desativar um processo de daemon, iniciando no exemplo de inicialização mysqld.

Atualmente o que estou fazendo é renomear /etc/init/mysql.confa /etc/init/mysql.conf.bakmas depois de ler um pouco sobre systemdeu vim a saber que ele fornece enable & disableopção para a tarefa acima.

Então, existe algo semelhante no ubuntu 12.04 com upstart.


Você diz que está usando o systemd? Eu o uso no meu computador Fedora 17. systemctl [enable|disable|is-enabled] mysqld.service
precisa saber é o seguinte

1
@ BenjiWiebe: Não, não estou usando o systemd. Estou usando upstart porque systemd não é o padrão no ubuntu 12.04 / 12.10.
Re

1
oh eu vejo agora ... Não sei o que eu estava pensando.
precisa saber é o seguinte

Respostas:


26

Você pode desativar os serviços executando o seguinte comando:

sudo update-rc.d -f <service name> disable

Trecho da página de manual:

Quando executado com as opções desativar [S | 2 | 3 | 4 | 5], o update-rc.d modifica os links de nível de execução existentes para o script /etc/init.d/name renomeando os links de início para interromper os links com um número de sequência igual para a diferença de 100 menos o número de sequência original.


2
Eu não tenho reputação suficiente para recusar isso e fazê-lo sem uma explicação seria indelicado de qualquer maneira, então apenas um comentário: A pergunta do @Noob refere-se ao Ubuntu 12.04 que usa a Upstart (/etc/init/*.conf) arquivos) para a maioria dos daemons do sistema (como mencionado por @Noob), enquanto sua sugestão funciona apenas para daemons iniciados usando scripts em /etc/init.d/* (o antigo estilo SysV). Edit: Para o registro, warl0ck tem a resposta certa (obrigado!).
Xolox

3
A questão é sobre uma situação hipotética ou geral usando o mysql como um caso tópico específico. O OP parecia pelo menos parcialmente ciente dessa resposta, mas pode servir bem para a posteridade ao observar que alguns pacotes úteis não respeitam e não respeitam o formato inicial (como o webmin e muitos auto-criados a partir de pacotes de origem na época dos comentários) . Isso significa que esse método pode ser uma resposta parcial válida para o contexto, assim como warl0ck e as respostas de Mark fazem para abordar o ponto específico do hipotético serviço mysql instalado com um gerenciador de pacotes.
JustinC

O sinalizador -f não é necessário.
Dannyman 7/11

20

A maneira correta de desativar e iniciar o serviço é criar um arquivo XX.override,

echo 'manual' > /etc/init/mysqld.override

Dessa forma, o serviço inicial não será iniciado automaticamente


Isso ainda funciona Ubuntu 12.04?
RSK 01/02

@RSK sim, por que você não tenta?
margarida

1
Eu tentei e não funcionou para mim. Deixe-me tentar novamente e atualizará você.
RSK 07/02

Não, ele não funciona no Ubuntu-14.04.
Hi-Angel

1
@RSK yes, why don't you just give it a try?Suponho, porque é muito inconveniente reiniciar o sistema com "uma tentativa" para todos os conselhos desta página.
user907860

7

@ warl0ck está certo; queria acrescentar que essas informações estão bem documentadas na documentação do Upstart: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

Especificamente:

Com o Upstart 1.3, você pode usar arquivos de substituição e a estrofe manual para obter o mesmo resultado de uma maneira mais simples [27]:

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

Observe que você pode obter o mesmo efeito fazendo isso:

# echo "manual" >> /etc/init/myjob.conf

No entanto, usar o recurso de substituição significa que você pode deixar o arquivo de configuração do trabalho original intocado.

Para reverter para o comportamento original, exclua ou renomeie o arquivo de substituição (ou remova a sub-rotina manual do seu arquivo ".conf").


5

Há também um bom software para ajudá-lo. É chamado rcconf.

Basta fazer o download usando:

sudo apt-get install rcconf

e use-o com o comando

rcconf

Você obtém uma interface agradável (linha de comando) para desativar / ativar serviços.


Isso não está incluído no sistema, portanto, instale mais coisas que não serão a melhor resposta.
M3nda

mas realmente útil: D
Magico

1

Tente navegar /etc/rc2.de renomear o que você deseja não executar na inicialização: altere o (inicial, maiúsculo) "S" para um "K" (por exemplo, S02mysqlpara K02mysql). Se você mudar de idéia, basta inverter. Eu acho que o 2 se refere ao nível de execução; nesse caso, 2 é o padrão, nível de execução multiusuário. Provavelmente é aí que você tem a maioria das coisas para o uso diário do computador.

Edit : Leia o comentário de James O'Gorman abaixo.


1
Sim '2' refere-se ao nível da execução. Você pode verificar seu nível de execução atual usando who -rou runlevel.
precisa saber é o seguinte

Isso é verdade who --runlevel.
Emanuel Berg

1
Embora isso atinja o que você deseja, tecnicamente é a coisa errada a fazer. Nos termos do init do SysV, os scripts 'S' são scripts de início e 'K' são scripts de interrupção - ou seja, S são executados em ordem na inicialização e K são executados em ordem no desligamento (ou mudando para um nível de execução inferior).
James O'Gorman

@ JamesO'Gorman: Interessante, estou no Debian, você está dizendo que meus "K scripts" são executados no desligamento? Existe alguma carta que possa ser usada para desativar o script completamente, sem nenhum risco? (É uma espécie de prática para mantê-los na mesma pasta, deve uma nova situação surgir onde você quer que eles.)
Emanuel Berg

@EmanuelBerg Sim, initestará executando o 'KXXscript stop' no desligamento. Você deve remover o link simbólico ou remover o bit de execução do script init real. Eu acredito que o Debian usa update-rc.dpara gerenciar isso. Uso de RHEL (e derivados) chkconfig.
James O'Gorman

0

Com o Upstart, a configuração do serviço está nos arquivos /etc/init/. Por exemplo, ssh é controlado usando um arquivo de configuração/etc/init/ssh.conf

Este arquivo especifica os "eventos" que solicitarão ao Upstart que inicie o "trabalho".

Para impedir que um serviço seja iniciado automaticamente, um dos vários métodos pode ser usado:
a) Renomeie o arquivo service.conf para que não termine com .conf
b) Comente a linha "iniciar" do arquivo service.conf.

Nas versões mais recentes do upstart (pelo menos a partir da v1.3), você também pode substituir o início on-line usando um arquivo service.override, para poder usar:
# echo manual > /etc/init/service.override

Por fim, você também pode adicionar a palavra-chave "manual" ao final do arquivo de configuração do serviço, por exemplo, via:
# echo manual >> /etc/init/service.conf

Observe que isso não "interrompe" o serviço em execução, apenas o impede de iniciar automaticamente. Enquanto definido para inicialização "manual", você controla o serviço usando initctl, por exemplo, para parar e iniciar o daemon SSH:
# initctl stop ssh
# initctl start ssh

Indiscutivelmente, a melhor documentação para o Upstart está em http://upstart.ubuntu.com/cookbook/

A Seção 11.44 aborda "a desativação do início automático de um serviço, aqui: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting


0

Bem, devo dizer que a afirmação

echo "manual" >> /etc/init/myjob.override

é um pouco enganador, porque significa acrescentar o arquivo de substituição. Eu testei isso no 14.04 com o gerenciador de rede e o seguinte não funcionou

vim /etc/init/network-manager.override:
start
manual

No entanto, isso funcionou

vim /etc/init/network-manager.override:
#start
manual

Portanto, na IMO, o initctl procura a primeira linha não comentada e a executa. Talvez eu esteja errado, mas esses foram os resultados dos meus testes. Entradas são bem-vindas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.