Como ativar ou desativar serviços?

737

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 à inicialização, que tem como objetivo a pasta /etc/init.d e seu conteúdo.

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

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

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

    
por NES 29.12.2010 / 22:03

7 respostas

730

Existem serviços que podem ser ativados / desativados usando a GUI (como o aplicativo startup ) 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:

Ativação / desativação temporária de serviços

Para interromper e iniciar serviços temporariamente (não habilita / desabilita para inicialização futura), você pode digitar service SERVICE_NAME . Por exemplo:

  • sudo service apache2 stop (irá PARAR o serviço Apache até que Reinicie ou até que você o inicie novamente).

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

  • service apache2 status (informará o STATUS do serviço, se ele estiver ativado / em execução de desativado / NÃO em execução).

  • sudo service apache2 restart (O RESTART será 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 um Apache Reiniciar irá salvar você de ter que 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 , com o MySQL, apenas mencionaria que falta 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 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 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 - Ativa o serviço, na próxima reinicialização ou no próximo evento de inicialização. Ele 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. 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 - Mostra 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 no Upstart), poderíamos usar os seguintes comandos:

status SERVICE - Isso nos informará se um serviço convertido está em execução ou não. Observe que isso está obsoleto em favor de start , stop , status & amp; %código%. 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 podem funcionar apenas com o comando restart acima, mas não com os comandos abaixo, a menos que sejam 100% convertidos em serviços iniciantes:

  • START - service

  • PARAR - sudo start mysql

  • RESTART - sudo stop mysql

  • STATUS - sudo restart mysql

Ativando / desativando um serviço

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

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

em que a sub-rotina sudo status smbd impedirá que o Upstart carregue automaticamente o serviço na próxima inicialização. Qualquer serviço com a manual final 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

Colocará o serviço MySQL no modo .override . Se você não quer isso, depois você pode simplesmente fazer

sudo rm /etc/init/mysql.override

e reinicialize para que o serviço seja iniciado 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. Desativar, como mencionado acima, fará uso do serviço manual .

    
por Luis Alvarado 29.12.2010 / 22:26
330

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, ao contrário de 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.d e, em seguida, usar o comando update-rc.d (ou em distros baseadas em RedHat, chkconfig ) para habilitá-lo ou desativá-lo.

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

Um grande problema com o SysV foi que ao inicializar o sistema, tudo tinha que ser feito em série, uma coisa após a outra, fazendo com que o tempo de inicialização do sistema ficasse muito lento . Tentativas foram feitas para paralelizar isso, mas elas eram aleatórias e difíceis de serem aproveitadas. Esta foi a principal razão pela qual Upstart foi criado.

Upstart

O Upstart usa arquivos de definição de tarefa em /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 com limite de disco enquanto outro serviço ligado à CPU é executado ou enquanto a rede aguarda que um endereço IP dinâmico seja atribuído.

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

Deixe-me 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 para 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 squid e samba , foram convertidos.

O serviço é baseado em upstart?

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

status servicename

Se for um trabalho upstart , será mostrado:

$ status statd
statd start/running, process 942

Mas se não for, você verá algo mais assim:

$ status apache2
status: Unknown job: apache2

Nesse caso, apache2 não foi convertido para upstart . Então, para desabilitar apache2 você acabou de executar

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

Desativar serviços (jobs) no upstart

As definições de tarefa de inicialização não possuem um comando update-rc.d . 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, será necessário comentar a condição start on . Digamos que você queira instalar o samba , mas não iniciá-lo automaticamente. Aqui está o arquivo de trabalho (in 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 , você pode simplesmente colocar um # na frente do " start on local-filesystems ". Observe que, embora não seja iniciado novamente durante a inicialização, você ainda precisará pará-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ê 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 as start on e stop on stanzas: manual . Então, outra maneira de desativar o serviço a partir de 11.04 é fazer:

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

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

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

    
por SpamapS 06.01.2011 / 19:25
120

sysv-rc-conf

Tente usar o 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

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 SPACE nos níveis de execução desejados.

Jobs-Admin

Outra alternativa seria Jobs-Admin instalando através de

sudo apt-get install jobs-admin

que também fornece GUI como este

Para mostrar mais trabalhos, você precisa marcar o Mostrar trabalhos protegidos em seu menu.

chkconfig

A terceira opção seria o chkconfig ,

sudo apt-get install chkconfig

Ele 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 adequados.

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 de chkconfig.

    
por atenz 28.06.2012 / 20:00
48

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

sudo apt-get install rcconf
sudo rcconf

Navegue com a tecla tab e as teclas de seta, 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 do blog , que também mostra sysv-rc-conf - a 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.

    
por j-g-faustus 06.01.2011 / 19:44
18

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

  • Jobs-Admin

    sudo apt-get install jobs-admin
    
por Postadelmaga 21.05.2012 / 12:27
12

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

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

    
por Izzy 30.06.2012 / 22:27
7

Existe também o Gestor de arranque .

Para instalar: sudo apt-get install bum

Mais informações: link

    
por Sadi 20.05.2014 / 16:47