Como ativar ou desativar serviços?


820

Eu li sobre como habilitar e desabilitar serviços no Ubuntu e parece que existem diferentes possibilidades para gerenciá-los.

O primeiro método que encontrei é update-rc.dadicionar novos serviços à inicialização, que tem como objetivo a /etc/init.dpasta e seu conteúdo.

O outro que encontrei é editar .confarquivos na /etc/initpasta.

Qual é a maneira recomendada de ativar / desativar / adicionar serviços e por quê?

Você poderia dar um exemplo passo a passo, curto e à prova de balas, sobre como adicionar um serviço no Ubuntu e habilitá-lo e desabilitá-lo?



Isso seria útil para aqueles que ficaram no Fedora 12 e chegaram aqui. Caso o linkrot chkconfigseja o que você está procurando.
Dedos de sangramento

3
Observe que a resposta para o Ubuntu 14.04 ainda está faltando aqui.
Reinier pós

2
@MarcelloNuccio: A partir do Ubuntu 15.04, o Upstart foi preterido em favor do Systemd.
Dan Dascalescu 10/09/16

Os programas de inicialização automática são configurados em autostartmanifestos ou em *.servicearquivos em vários locais, assim como em init.dou crontab. Veja: unix.stackexchange.com/a/525845/43233
Noam Manos

Respostas:


831

Existem serviços que podem ser ativados / desativados usando a GUI (como o startupaplicativo) ou o terminal.

Para o terminal, você tem várias opções. Primeiro, abra um terminal (digite "terminal" no painel, por exemplo, e abra-o). Então:

Serviços de ativação / desativação temporários

Para parar e iniciar serviços temporariamente (não os ativa / desativa para futuras botas), você pode digitar service SERVICE_NAME. Por exemplo:

  • sudo service apache2 stop( PARARÁ o serviço Apache até a reinicialização ou até você iniciá-lo novamente).

  • sudo service apache2 start( INICIARÁ o serviço Apache assumindo que ele foi interrompido antes.).

  • service apache2 status (Informa o status do serviço, se ele está ativado / em execução ou desativado / NÃO está em execução.).

  • sudo service apache2 restart( Reiniciará o serviço. Isso é mais comumente usado quando você altera um arquivo de configuração. Nesse caso, se você alterou uma configuração do PHP ou uma configuração do Apache. A reinicialização evitará que você precise parar / iniciar com 2 linhas de comando )

  • service apache2(Nesse caso, como você não mencionou a AÇÃO a ser executada para o serviço, ele mostrará todas as opções disponíveis para esse serviço específico.) Esse aspecto varia dependendo do serviço, por exemplo, no MySQL, ele mencionaria apenas que está faltando um parâmetro. Para outros serviços, como o serviço de rede, ele mencionaria a pequena lista de todas as opções disponíveis.


SYSTEMD

A partir do Ubuntu 15.04, o Upstart será preterido em favor do Systemd. Com o Systemd para gerenciar os serviços, podemos fazer o seguinte:

systemctl start SERVICE- Use-o para iniciar um serviço. Não persiste após a reinicialização

systemctl stop SERVICE- Use-o para interromper um serviço. Não persiste após a reinicialização

systemctl restart SERVICE - Use-o para reiniciar um serviço

systemctl reload SERVICE - Se o serviço suportar, ele recarregará os arquivos de configuração relacionados a ele sem interromper nenhum processo que esteja usando o serviço.

systemctl status SERVICE- Mostra o status de um serviço. Informa se um serviço está em execução no momento.

systemctl enable SERVICE- Liga o serviço, na próxima reinicialização ou no próximo evento de inicialização. Persiste após a reinicialização.

systemctl disable SERVICE- Desativa o serviço na próxima reinicialização ou no próximo evento de parada. Persiste após a reinicialização.

systemctl is-enabled SERVICE - Verifique se um serviço está atualmente configurado para iniciar ou não na próxima reinicialização.

systemctl is-active SERVICE - Verifique se um serviço está ativo no momento.

systemctl show SERVICE - Mostre todas as informações sobre o serviço.

sudo systemctl mask SERVICE- Desabilite completamente um serviço vinculando-o a /dev/null; você não pode iniciar o serviço manualmente ou habilitá-lo.

sudo systemctl unmask SERVICE- Remove o link /dev/nulle restaura a capacidade de ativar e / ou iniciar manualmente o serviço.


UPSTART (Descontinuado desde 15.04)

Se quisermos usar a maneira Upstart oficial (observe que, no momento, nem todos os serviços foram convertidos em Upstart), poderíamos usar os seguintes comandos:

status SERVICE- Isso nos dirá se um serviço convertido está sendo executado ou não. Note que esta é preterida em favor de start, stop, statuse restart. Também nos dirá se um serviço ainda não foi convertido em inicial:

Um serviço convertido normalmente gera o status atual (Iniciando, Executando, Parando ...) e o ID do processo. Um serviço não convertido causaria um erro sobre um trabalho desconhecido .

Alguns atalhos podem funcionar apenas com o servicecomando acima, mas não com os comandos abaixo, a menos que sejam 100% convertidos em serviços iniciantes:

  • START -sudo start mysql

  • PARAR -sudo stop mysql

  • REINICIAR -sudo restart mysql

  • ESTADO -sudo status smbd

Ativando / Desativando um Serviço

Para alternar entre um serviço e iniciar ou parar permanentemente, você precisa:

echo manual | sudo tee /etc/init/SERVICE.override

onde a estrofe manualimpedirá o Upstart de carregar automaticamente o serviço na próxima inicialização. Qualquer serviço com o .overridefinal terá precedência sobre o arquivo de serviço original. Você só poderá iniciar o serviço manualmente posteriormente. Se você não quiser isso, basta excluir o arquivo .override. Por exemplo:

echo manual | sudo tee /etc/init/mysql.override

Colocará o serviço MySQL em manualmodo. Se você não quer isso, depois pode simplesmente fazer

sudo rm /etc/init/mysql.override

e Reinicialize para que o serviço inicie automaticamente novamente. Obviamente, para habilitar um serviço, a maneira mais comum é instalá-lo. Se você instalar o Apache, Nginx, MySQL ou outros, eles serão iniciados automaticamente após o término da instalação e serão iniciados sempre que o computador inicializar. Desabilitar, como mencionado acima, fará uso do serviço manual.


Você precisa adicionar .servicea todos os comandos? systemctl mongod statusfuncionou muito bem.
Dan Dascalescu 10/09/16

@ DanDascalescu não, você não, mas deixe-me esclarecer isso lá.
22616 Luis Alvarado

4
O arquivo .override deve ser colocado em /etc/init.d/, ou seja, onde o serviço é colocado?
precisa saber é o seguinte

Por que o Upstart foi descontinuado no 15.04? qual é a maneira correta de executar scripts ao iniciar / reiniciar no ubuntu 16.04 ou posterior?
precisa

1
Obrigado por esta resposta abrangente. O systemdconjunto de comandos funciona bem no Ubuntu 18.04.
Doktor J

354

Atualmente, existem três maneiras diferentes de o software ser iniciado como um serviço no Ubuntu, SysV , Upstart e systemd . Um serviço é definido aqui como um programa executado pelo sistema em segundo plano, em oposição a um iniciado e executado diretamente pelo usuário.

SysV

A maneira tradicional de iniciar serviços no Linux era inserir um script /etc/init.de, em seguida, usar o update-rc.dcomando (ou nas distros baseadas no RedHat chkconfig) para habilitá-lo ou desabilitá-lo.

Este comando usa alguma lógica levemente complicada para criar links simbólicos /etc/rc#.d, que controlam a ordem dos serviços iniciados. Se você executar, ls /etc/rc2.dpoderá ver a ordem em que os serviços serão eliminados com um nome de arquivo como K##xxxxe iniciado com nomes de arquivos S##xxxx. O ##in S##xxxxsignifica uma "ordem inicial" para o serviço xxxx. Por outro lado, o ##in K##xxxxsignifica a ordem de interrupção do serviço xxxx.

Um grande problema com o SysV era que, durante a inicialização do sistema, tudo tinha que ser feito em série, uma coisa após a outra, tornando os tempos de inicialização do sistema muito lentos . Foram feitas tentativas para paralelizar isso, mas eram aleatórias e difíceis de tirar o máximo proveito. Esse foi o principal motivo pelo qual o Upstart foi criado.

Subir na vida

O Upstart usa arquivos de definição de tarefa /etc/initpara definir em quais eventos um serviço deve ser iniciado. Portanto, enquanto o sistema está inicializando, o iniciante processa vários eventos e pode iniciar vários serviços em paralelo. Isso permite que eles utilizem totalmente os recursos do sistema, por exemplo, iniciando um serviço vinculado ao disco enquanto outro serviço vinculado à CPU é executado ou enquanto a rede aguarda a atribuição de um endereço IP dinâmico.

Você pode ver todos os arquivos de tarefas iniciantes executando ls /etc/init/*.conf

Deixe-me parar por aqui e dizer que, se você não souber o que é um serviço, ou o que ele faz, NÃO o desative!

Nem todos os serviços foram convertidos para iniciantes. Enquanto trabalhava na equipe de servidores da Canonical nos últimos meses, trabalhei em vários arquivos de tarefas convertidos, e a parte mais interessante é que ela permite livrar-se de todo o script "mágico" e apenas colocar um alguns comandos aqui e ali para definir exatamente como iniciar o serviço e nada mais. Mas, por enquanto, apenas alguns serviços de rede tradicionais, como squid e samba , foram convertidos.

Um serviço é baseado no inicio?

Para descobrir se um serviço é baseado no início, você pode executar o comando status:

status servicename

Se for um trabalho inicial , ele mostrará o seguinte:

$ status statd
statd start/running, process 942

Mas se não for, você verá algo mais parecido com isto:

$ status apache2
status: Unknown job: apache2

Nesse caso, apache2não foi convertido para inicial . Então, para desativar, apache2basta executar

sudo update-rc.d apache2 disable
sudo service apache2 stop

Desativar serviços (trabalhos) no iniciante

As definições de trabalho inicial não têm um update-rc.dcomando. Para desativar o trabalho, você precisa editar o arquivo do trabalho diretamente para desativá-lo. Existem duas maneiras de fazer isso.

Se você ainda deseja iniciá-lo manualmente, precisará comentar a start oncondição. Digamos que você queira instalar o samba , mas não o inicie automaticamente. Aqui está o arquivo do trabalho (em natty):

description "SMB/CIFS File Server"
author      "Steve Langasek <[email protected]>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-start script
    RUN_MODE="daemons"

    [ -r /etc/default/samba ] && . /etc/default/samba

    [ "$RUN_MODE" = inetd ] && { stop; exit 0; }

    install -o root -g root -m 755 -d /var/run/samba
end script

exec smbd -F

Para desativar o samba , basta colocar um #na frente do " start on local-filesystems". Observe que, embora não seja iniciado o backup na inicialização, você ainda precisa interrompê-lo desta vez com

sudo service smbd stop

Se, no entanto, você nunca quiser que o samba inicie, sugiro remover o pacote. Se, no entanto, você deseja que ele esteja instalado, mas não inicializável, você também pode:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

Desabilitar um serviço usando a estrofe de inicialização / parada (a partir de 11.04)

Começando com a versão do upstart que estará em 11,04, há uma nova palavra-chave que desativa o start one stop onestrofes: manual. Portanto, outra maneira de desativar o serviço a partir do 11.04 é:

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

Você pode criar um overridearquivo para desativar um serviço sem editar a definição da tarefa, apenas colocando a manualpalavra-chave.


20
Parece que o 11.04 também substituiu. Portanto, echo manual >> /etc/init/<service>.overrideé preferível, pois deixa intacto o arquivo .conf original. De qualquer forma, ainda é uma pena que uma ativação / desativação tão básica tenha levado 3 anos para se desenvolver, e não há GUI para isso.
MestreLion 27/05

3
update-rc.d é o que realmente importa
Timofey

2
parece muito mais manipular o tópico original do que a resposta que foi marcada como resposta definitiva pelo pôster da pergunta original. Obrigado! :)
Henning

1
No meu caso, o arquivo /etc/init/ssh.confexiste, mas status sshe status sshdambos dizem "trabalho Desconhecido". Esta resposta não parece abordar essa possibilidade?
Brian Z

1
status sshdá-me 'trabalho desconhecido', também, mas service ssh statusfunciona para mim
PTIM

129

sysv-rc-conf

Tente usar sysv-rc-conf

sudo apt-get install sysv-rc-conf

e para começar a gerenciar os serviços, execute

sudo sysv-rc-conf

O que trará uma janela interativa como esta

insira a descrição da imagem aqui

Você pode navegar pelas páginas usando Ctrl+na página seguinte e Ctrl+pa página anterior. Você pode ativar e desativar serviços selecionando os SPACEníveis de execução desejados.

Jobs-Admin

Outra alternativa seria Jobs-Admin instalando através do

sudo apt-get install jobs-admin

Que também fornece GUI como este

visualização de jobs-admin

Para mostrar mais trabalhos, você deve marcar a opção Mostrar trabalhos protegidos no menu.

chkconfig

E a terceira opção seria chkconfig ,

sudo apt-get install chkconfig

Pode ser usado via CLI chkconfig, mostrando a lista de trabalhos On / Off. Também podemos visualizar os serviços do sistema usandochkconfig –list

Os serviços podem ser ativados usando

chkconfig <service> on

Os serviços podem ser desativados usando

chkconfig <service> off

E podemos até adicionar nosso próprio serviço, usando um script init adequado com títulos adequados.

chkconfig --add <service>

update-rc.d

E outra opção pode ser consultada aqui update-rc.d , explicada brevemente aqui .

Observe que, para o Ubuntu Server 12.04, update-rc.d é usado em vez do chkconfig.


1
no servidor ubuntu:Package chkconfig is not available, but is referred to by another package.
pwned

@pwned Você pode editar e publicar as informações atualizadas sobre a edição do servidor. Obrigado.
atenz

Fiz como você sugeriu, agora cabe a revisão por pares.
pwned

empregos de administrador não permite mudar de emprego (Ubuntu 14.04), produzindo um relatório acidente vez ;-)
Sadi

5
O sysv-rc-conf não é adequado para uso com o iniciante ou o systemd, sendo apenas o antigo sistema System 5 rc, que não é o padrão no Ubuntu Linux há quase uma década. O bug Debian # 791689 reconhece isso e questiona por que não foi marcado como conflitante com o systemd.
JdeBP

48

Para aqueles que executam o Ubuntu no ssh, acho que a melhor opção é rcconf- um programa baseado em texto:

sudo apt-get install rcconf
sudo rcconf

texto alternativo

Navegue com as teclas tab e seta, pressione a barra de espaço para ativar / desativar. As alterações são persistentes nas reinicializações.

Captura de tela emprestada deste post do blog , que também mostra sysv-rc-conf- uma ferramenta semelhante que também permite definir o nível de execução. (Para aqueles que se importam o suficiente com os níveis de execução para alterá-los :)

Infelizmente, rcconf não funciona com iniciantes (serviços listados na /etc/init/*), apenas com o mecanismo tradicional ( ls -l /etc/init.d/*- aqueles que não são links simbólicos).

Felizmente, muitos dos serviços que são relevantes ao fazer o ssh em um servidor (Apache, Tomcat, mdadm, boinc-client ...) ainda não foram movidos para o início.


6
Isso ainda funciona com o iniciante?
oKtosiTe

3
Infelizmente não. Mas funcionou para todos os casos que eu queria mudar - os trabalhos iniciantes parecem ser principalmente coisas que eu nunca quero desativar - relógio de hardware, daemon de log, rede etc. (no servidor Ubuntu, pelo menos). Mas é algo para estar ciente (eu não estava :), atualizei a postagem.
Jg-faustus

Infelizmente o mysql foi convertido para iniciante. E isso é um serviço que eu só uso quando estou fazendo algum projeto.
MestreLion

Há um erro no rcconf no Ubuntu 12.04 que impede que o programa seja iniciado. Para resolver o problema, você precisa instalar o pacote de diálogo.
Devius

1
Como essa resposta foi escrita, update-rc.dfoi alterada e algumas de suas funcionalidades descontinuadas foram removidas . O bug da Debian # 727735 observa que o rcconf não foi alterado para corresponder. E não, o rcconf também não funciona com o systemd, não sendo aplicável a nenhum dos sistemas init padrão do Ubuntu Linux na última década.
JdeBP

18

Descobri que existe essa ferramenta GUI, algo como BUM, mas compatível com o Upstart:

  • Jobs-Admin

    sudo apt-get install jobs-admin
    

Mas é muito simples, e não permitem mudar "trabalhos protegidos" (o que é que Jobbs Apple tem Jobs, sistema operacional tem daemons?!)
kakaz

Eu nem sequer permitem mudar "empregos desprotegidos" (Ubuntu 14.04), produzindo um relatório acidente vez ;-)
Sadi

12

Editar o arquivo de configuração inicial existente (como descrito acima) não é uma boa idéia. Um pacote atualizado pode fornecer uma configuração atualizada e você precisa repetir suas alterações várias vezes.

Ao dar uma olhada man 5 init, encontrará uma solução mais apropriada: usando uma configuração de substituição. Exemplo curto: digamos que temos um serviço chamado "foobar"; portanto, haveria um arquivo chamado /etc/init/foobar.confcom sua configuração inicial. Agora você não deseja remover esse arquivo nem modificá-lo - mas também não deseja que este serviço seja executado? Então coloque uma substituição de arquivo ao lado dele: /etc/init/foobar.override, contendo (opcionalmente o cabeçalho com a descrição e) em vez dos start on/ stop onlinhas que você colocar uma linha com uma palavra: manual. Dessa forma, você instrui o iniciante a usar basicamente o foobar.conf, mas substitui a definição de inicialização para iniciar apenas esse serviço quando aplicado manualmente (via service foobar startem nosso exemplo).



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.