Questão Como habilitar ou desabilitar serviços?


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

O primeiro método que encontrei é update-rc.d para adicionar novos serviços ao startup, que visa /etc/init.d pasta e seu conteúdo.

O outro que encontrei é para editar .conf arquivos no /etc/init pasta.

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

Você poderia, por favor, dar um breve exemplo passo a passo de como adicionar um serviço no Ubuntu e ativá-lo e desativá-lo?


761
2017-12-29 21:03


origem


Para networking, por favor veja: askubuntu.com/questions/230698/… - Jorge Castro
este seria útil para aqueles que estão presos no Fedora 12 e chegaram aqui. No caso linkrot chkconfigé o que você está procurando. - Bleeding Fingers
Note que a resposta para o Ubuntu 14.04 ainda está faltando aqui. - Reinier Post
@MarcelloNuccio: A partir do Ubuntu 15.04, o Upstart foi substituído em favor do Systemd. - Dan Dascalescu


Respostas:


Existem serviços que podem ser ativados / desativados usando a GUI (como o startup aplicação) ou no 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 temporários de ativação / desativação

Para parar e iniciar serviços temporariamente (Não habilita / desabilita eles para futuras inicializações), você pode digitar service SERVICE_NAME. Por exemplo:

  • sudo service apache2 stop (Vai PARE o serviço Apache até a reinicialização ou até que você inicie novamente).

  • sudo service apache2 start (Vai COMEÇAR o serviço Apache assumindo que foi parado antes.).

  • service apache2 status (Vai dizer-lhe o STATUS do serviço, se estiver habilitado / em execução de desativado / NÃO em execução).

  • sudo service apache2 restart (Vai 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. Reiniciar irá salvá-lo de ter que parar / iniciar com 2 linhas de comando)

  • service apache2 (Neste caso, desde que você não mencionou a ACTION para executar o serviço, ele mostrará todas as opções disponíveis para aquele serviço específico.) Este aspecto varia dependendo do serviço, por exemplo, com o MySQL ele apenas mencionaria que está faltando um parâmetro. Para outros serviços, como serviço de rede, mencionaria a pequena lista de todas as opções disponíveis.


SYSTEMD

A partir do Ubuntu 15.04, o Upstart será substituído 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 para parar 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 qualquer processo que esteja usando o serviço.

systemctl status SERVICE - Mostra o status de um serviço. Diz se um serviço está sendo executado no momento.

systemctl enable SERVICE - Liga o serviço, na próxima reinicialização ou no próximo evento de início. Ele persiste após a reinicialização.

systemctl disable SERVICE - Desliga o serviço na próxima reinicialização ou no próximo evento de parada. Ele 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 - Mostrar todas as informações sobre o serviço.

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

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


UPSTART (obsoleto desde 15.04)

Se quisermos usar a forma oficial do Upstart (observe que, no momento, nem todos os serviços foram convertidos para o Upstart), podemos usar os seguintes comandos:

status SERVICE - Isso nos informará se um serviço convertido está em execução ou não. Observe que isso é obsoleto em favor de start, stop, status E restart. Também nos informará se um serviço ainda não foi convertido para upstart:

Um serviço convertido normalmente emitirá o status atual (Starting, Running, Stopping ...) e o ID do processo. Um serviço não convertido daria um erro sobre um trabalho desconhecido.

Alguns atalhos só podem funcionar com o service comando acima, mas não com os comandos abaixo, a menos que sejam 100% convertidos para serviços iniciantes:

  • COMEÇAR - sudo start mysql

  • PARE - sudo stop mysql

  • REINICIAR - sudo restart mysql

  • STATUS - sudo status smbd

Ativando / Desativando um Serviço

Para ativar ou desativar um serviço permanentemente, você precisaria:

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

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

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

Vai colocar o serviço MySQL em manual modo. Se você não quer isso, depois você pode simplesmente fazer

sudo rm /etc/init/mysql.override

e Reinicie para o serviço para iniciar automaticamente novamente. É claro que para habilitar um serviço, a maneira mais comum é instalá-lo. Se você instalar o Apache, Nginx, MySQL ou outros, eles iniciarão automaticamente após a conclusão da instalação e serão iniciados toda vez que o computador for inicializado. Desabilitar, como mencionado acima, fará uso do serviço manual.


757
2017-12-29 21:26



Você precisa adicionar .service a cada comando? systemctl mongod status funcionou muito bem. - Dan Dascalescu
@DanDascalescu não, você não, mas deixe-me esclarecer que lá. - Luis Alvarado♦
O arquivo .override precisa ser colocado em /etc/init.d/, ou seja, onde o serviço é colocado? - Obi Wan - PallavJha
Por que o Upstart está obsoleto em 15.04? qual é o caminho certo para executar scripts em iniciar / reiniciar no Ubuntu 16.04 ou posterior? - Kamalakannan J
@ KamalakannanJ você usou os níveis de rc? (por exemplo, /etc/rc0.d) ou /etc/rc.local? - Luis Alvarado♦


Atualmente, existem três maneiras diferentes para 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 programa iniciado e executado diretamente pelo usuário.

SysV

A maneira tradicional de iniciar serviços no Linux era colocar um script em /etc/init.de, em seguida, use o update-rc.d comando (ou em distros baseadas em RedHat, chkconfig) para ativar ou desativar.

Este comando usa alguma lógica levemente complicada para criar links simbólicos /etc/rc#.d, que controlam a ordem de início dos serviços. Se você correr ls /etc/rc2.d você pode ver a ordem que os serviços serão mortos com um nome de arquivo como K##xxxx e comecei com nomes de arquivos S##xxxx. o ## dentro S##xxxx significa uma "ordem de início" para o serviço xxxx. Por outro lado, ## dentro K##xxxx significa a ordem de morte para o serviço xxxx.

Um grande problema com SysV foi que ao inicializar o sistema, tudo tinha que ser feito em série, uma coisa depois da outra, tornando os tempos de inicialização do sistema muito lentos. Tentativas foram feitas para paralelizar isso, mas elas eram aleatórias e difíceis de serem aproveitadas. Esta foi a principal razão que Upstartfoi criado.

Upstart

O Upstart usa arquivos de definição de tarefa /etc/init para definir em quais eventos um serviço deve ser iniciado. Assim, enquanto o sistema está inicializando, o upstart processa vários eventos e, em seguida, 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 ligado à CPU é executado ou enquanto a rede está aguardando a atribuição de um endereço IP dinâmico.

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

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

Nem todos os serviços foram convertidos em upstart. Enquanto trabalhava na equipe de servidores da Canonical nos últimos meses, trabalhei em vários arquivos de trabalho convertidos, e a parte mais legal é que ele permite que você se livre de todo o script "mágico" e coloque um Alguns comandos aqui e ali para definir exatamente como iniciar o serviço e nada mais. Mas por enquanto, apenas um punhado de serviços de rede tradicionais, como Lula e sambaforam convertidos.

Um serviço é baseado em upstart?

Para descobrir se um serviço é baseado em upstart, você pode executar o comando status:

status servicename

Se é um arrivista trabalho, mostrará isto:

$ 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, apache2 não foi convertido para arrivista. Então, desabilitar apache2 você acabou de correr

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

Desativar serviços (jobs) em upstart

As definições de tarefa de inicialização não possuem update-rc.d comando. Para desativar o trabalho, você precisa editar o arquivo de trabalho diretamente para desativá-lo. Existem duas maneiras de fazer isso.

Se você ainda quiser ser capaz de iniciá-lo manualmente, então você precisa comentar o start on condição. Digamos que você queira instalar samba, mas não tem que começar automaticamente. Aqui está o arquivo de trabalho (in natty):

description "SMB/CIFS File Server"
author      "Steve Langasek <steve.langasek@ubuntu.com>"

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

Desabilitar samba, você pode simplesmente colocar um # na frente do "start on local-filesystems". Observe que, embora não seja iniciado novamente na inicialização, você ainda precisa pará-lo desta vez com

sudo service smbd stop

Se, no entanto, você nunca quiser samba para começar, sugiro remover o pacote. Se, no entanto, você quiser que ele seja instalado, mas não inicializável, você também pode fazer:

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

Desativar um serviço usando a estrofe iniciar / parar (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 on e stop on estrofes: manual. Então, outra maneira de desativar o serviço a partir de 11.04 é:

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

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

Você pode criar um override arquivo para desabilitar um serviço sem editar a definição do trabalho, apenas colocando manual palavra-chave nele.


335
2018-01-06 18:25



Parece que o 11.04 foi substituído também. assim echo manual >> /etc/init/<service>.override é preferível, pois deixa o arquivo .conf original intacto. De qualquer forma, ainda é uma pena que uma ativação / desativação básica tenha demorado três anos para ser desenvolvida, e não há interface gráfica para isso. - MestreLion
update-rc.d é o que realmente importa - Tim
parece muito mais tratar do tópico original do que a resposta que foi rotulada como a resposta defintiva do pôster da pergunta original. Obrigado! :) - Henning
No meu caso, o arquivo /etc/init/ssh.conf existe mas status ssh e status sshd ambos dizem "trabalho desconhecido". Esta resposta não parece abordar tal possibilidade? - Brian Z
status ssh me dá 'trabalho desconhecido' também, mas service ssh status funciona para mim - ptim


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

Que trará janela interativa como esta

enter image description here

Você pode navegar ainda mais pelas páginas usando Ctrl+n para a próxima página e Ctrl+p para a página anterior. Você pode ativar e desativar serviços selecionando SPACEnos runlevels desejados.

Empregos-Admin

Outro substituto seria Empregos-Admin instalando através

sudo apt-get install jobs-admin

Que também fornece GUI como este

jobs-admin preview

Para mostrar mais trabalhos, você tem que marcar o Mostrar trabalhos protegidos do seu menu.

chkconfig

E terceira opção seria chkconfig,

sudo apt-get install chkconfig

Pode ser usado via CLI chkconfig, mostrando a lista de trabalhos ativados / desativados. Também podemos ver os serviços do sistema usando chkconfig –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 de inicialização adequado com cabeçalhos apropriados.

chkconfig --add <service>

update-rc.d

E outra opção pode ser referida aqui update-rc.d , explicou brevemente Aqui.

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


121
2018-06-28 18:00



no servidor Ubuntu: Package chkconfig is not available, but is referred to by another package. - pwned
@pwned Você está livre para editar e publicar as informações atualizadas sobre a edição do servidor. Obrigado. - atenz
Eu fiz o que você sugeriu, agora é para revisão por pares. - pwned
empregos-admin não permite mudar de emprego (Ubuntu 14.04), produzindo um relatório de falha ;-) - Sadi
O sysv-rc-conf não é adequado para uso com o upstart ou systemd, sendo patentemente apenas para o antigo sistema System 5 rc, que não é o padrão no Ubuntu Linux há quase uma década. Debian Bug # 791689 reconhece isso e questiona porque ele não foi marcado como conflitante com o systemd. - JdeBP


Para aqueles de nós que rodam o Ubuntu sobre o ssh, eu acho que a melhor opção é rcconf - um programa baseado em texto:

sudo apt-get install rcconf
sudo rcconf

alt text

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

Captura de tela emprestada de este post de 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 runlevels para querer mudá-los :)

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

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


48
2018-01-06 18:44



Isso ainda funciona com o upstart? - oKtosiTe
Infelizmente não. Mas funcionou para todos os casos que eu queria mudar - os trabalhos iniciantes parecem ser principalmente coisas que eu nunca quero desabilitar - relógio de hardware, daemon de log, rede, etc. (no servidor Ubuntu, pelo menos). Mas é algo para estar ciente de (eu não estava :), eu atualizei o post. - j-g-faustus
Infelizmente o mysql foi convertido para upstart. E isso é um serviço que eu só uso quando estou fazendo algum projeto. - MestreLion
Há um bug com o 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
Desde que esta resposta foi escrita, update-rc.d foi alterado e parte de sua funcionalidade obsoleta foi removida. O bug # 727735 do Debian observa que o rcconf não foi alterado para corresponder. E não, o rcconf também não funciona com o systemd, portanto, não sendo aplicável a nenhum dos sistemas init padrão do Ubuntu Linux na última década. - JdeBP


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

  • Empregos-Admin

    sudo apt-get install jobs-admin
    

18
2018-05-21 10:27



Mas é muito simples, e não permitem alterar "empregos protegidos" (o que é que jobbs? A Apple tem Jobs, sistema operacional tem daemons!) - kakaz
Eu nem sequer permito mudar "empregos desprotegidos" (Ubuntu 14.04), produzindo um relatório de falhas ;-) - Sadi


Editar o arquivo de configuração existente do upstart (como descrito acima) não é uma boa ideia. Um pacote atualizado poderia fornecer uma configuração atualizada e você teria que repetir as alterações várias vezes.

Ao dar uma olhada man 5 init uma encontrará uma solução mais apropriada: usando uma configuração de substituição. Exemplo curto: digamos que temos um serviço chamado "foobar", então haveria um arquivo chamado /etc/init/foobar.conf com sua configuração upstart. Agora você não quer remover esse arquivo, nem modificá-lo - mas também não quer que este serviço seja executado? Então coloque um sobrepor arquivo ao lado dele: /etc/init/foobar.override, contendo (opcionalmente, o cabeçalho com a descrição e), em vez start on / stop on linhas você coloca uma linha com uma palavra: manual. Desta forma, você diz ao upstart para basicamente usar o foobar.conf, mas substitui a definição de inicialização para iniciar apenas esse serviço quando for aplicada manualmente service foobar start no nosso exemplo).


12
2018-06-30 20:27





Há também o Gerenciador de inicialização.

Para instalar: sudo apt-get install bum

Mais informações: http://www.marzocca.net/linux/bum.html

enter image description here


8
2018-05-20 14:47



Não esqueça de verificar o botão "Avançado". - not2qubit