Eu li sobre como habilitar e desabilitar serviços no Ubuntu e parece que existem diferentes possibilidades de gerenciá-los.
O primeiro método que encontrei é update-rc.d
adicionar novos serviços à inicialização, que visa a /etc/init.d
pasta e seu conteúdo.
A outra que encontrei é para editar .conf
arquivos na /etc/init
pasta.
Qual é a maneira recomendada de habilitar/desabilitar/adicionar serviços e por quê?
Você poderia dar um pequeno exemplo passo a passo à prova de balas sobre como adicionar um serviço no Ubuntu e habilitá-lo e desativá-lo?
Existem serviços que podem ser ativados/desativados usando a GUI (como o
startup
aplicativo) ou o terminal.Para o Terminal você tem várias opções. Primeiro, abra um terminal (digite "terminal" no traço, por exemplo, e abra-o). Então:
Serviços de ativação/desativação temporária
Para parar e iniciar os serviços temporariamente (não os habilita/desabilita para inicialização futura), você pode digitar
service SERVICE_NAME [action]
. 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
: IRÁ INICIAR o serviço Apache assumindo que foi parado antes.service apache2 status
: informará o STATUS do serviço, se estiver ativado/em execução ou desativado/NÃO em execução.sudo service apache2 restart
: Irá REINICIAR o serviço. Isso é mais comumente usado quando você mudou, um arquivo de configuração. Nesse caso, se você alterou uma configuração do PHP ou uma configuração do Apache. Reiniciar evitará que você precise parar/iniciar com 2 linhas de comandoservice apache2
: Neste 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. Este aspecto varia de acordo com o serviço, por exemplo, com MySQL só 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á preterido em favor do Systemd. Com o Systemd para gerenciar os serviços podemos fazer o seguinte (através do
systemctl action SERVICE
padrão):sudo systemctl start SERVICE
: Use-o para iniciar um serviço. Não persiste após a reinicializaçãosudo systemctl stop SERVICE
: Use-o para interromper um serviço. Não persiste após a reinicializaçãosudo systemctl restart SERVICE
: Use-o para reiniciar um serviçosudo 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.sudo 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.sudo 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á 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
: 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/null
e restaura a capacidade de habilitar e/ou iniciar manualmente o serviço.Upstart (obsoleto desde 15.04)
Se quisermos usar a maneira 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 dirá se um serviço convertido está sendo executado ou não. Observe que isso está obsoleto em favor destart
,stop
,status
&restart
. Ele também nos informará se um serviço ainda não foi convertido para upstart:Um serviço convertido normalmente geraria o status atual (Iniciando, Em Execução, Parando...) e a ID do processo. Um serviço não convertido geraria um erro sobre um trabalho desconhecido .
Alguns atalhos podem funcionar apenas com o
service
comando acima, mas não com os comandos abaixo, a menos que sejam 100% convertidos em serviços de inicialização:sudo start mysql
: Começarsudo stop mysql
: Pararsudo restart mysql
: Reiniciarsudo status smbd
: StatusHabilitando/Desabilitando um serviço
Para alternar um serviço de iniciar ou parar permanentemente, você precisaria:
onde a estrofe
manual
impedirá que o Upstart carregue automaticamente o serviço na próxima inicialização. Qualquer serviço com o.override
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 arquivo.override
. Por exemplo:Colocará o serviço MySQL em
manual
modo. Se você não quiser isso, depois você pode simplesmente fazere reinicie para que o serviço seja iniciado automaticamente novamente. Claro que para habilitar um serviço, a forma mais comum é instalando-o. Se você instalar Apache, Nginx, MySQL ou outros, eles serão iniciados automaticamente ao concluir a instalação e serão iniciados toda vez que o computador for inicializado. A desativação, como mencionado acima, fará uso do serviço
manual
.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 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 então usar oupdate-rc.d
comando (ou em distribuições baseadas em RedHat,chkconfig
) para habilitá-lo ou desabilitá-lo.Este comando usa alguma lógica um pouco complicada para criar links simbólicos em
/etc/rc#.d
, que controlam a ordem de inicialização dos serviços. Se você executarls /etc/rc2.d
, poderá ver a ordem em que os serviços serão encerrados com um nome de arquivo comoK##xxxx
e iniciados com nomes de arquivoS##xxxx
. O##
inS##xxxx
significa uma "ordem inicial" para o serviçoxxxx
. Por outro lado, o##
inK##xxxx
significa a ordem de eliminação para o serviçoxxxx
.Um grande problema com o SysV era que ao inicializar o 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 . Tentativas foram feitas para paralelizar isso, mas foram casuais e difíceis de aproveitar ao máximo. Esta foi a principal razão pela qual o Upstart foi criado.
Subir na vida
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 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 trabalho upstart executando
ls /etc/init/*.conf
Deixe-me parar por 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 alguém se livre de toda a "mágica" do script e apenas coloque 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 em upstart?
Para descobrir se um serviço é baseado em upstart, você pode executar o comando status:
Se for um trabalho iniciante , ele mostrará isso:
Mas se não for, você verá algo mais parecido com isto:
Nesse caso,
apache2
não foi convertido para upstart . Então, para desabilitarapache2
, basta executarDesabilitar serviços (jobs) no upstart
As definições de tarefa upstart não possuem um
update-rc.d
comando. Para desabilitar o trabalho, você precisa editar o arquivo de trabalho diretamente para desabilitá-lo. Existem duas maneiras de fazer isso.Se você ainda quiser iniciá-lo manualmente, precisará comentar a
start on
condição. Digamos que você queira instalar o samba , mas não que ele inicie automaticamente. Aqui está o arquivo de trabalho (em natty):Para desabilitar o samba , você pode simplesmente colocar um
#
na frente do "start on local-filesystems
". Observe que, embora não seja inicializado na inicialização, você ainda precisa pará-lo desta vez comSe, no entanto, você nunca quiser que o samba inicie, sugiro remover o pacote. Se, no entanto, você deseja que ele seja instalado, mas não inicializável, você também pode fazer:
Desabilitar um serviço usando a estrofe start/stop (a partir de 11.04)
A partir da versão do upstart que estará na 11.04, existe uma nova palavra-chave que desabilita as estrofes
start on
e : . Portanto, outra maneira de desativar o serviço a partir de 11.04 é fazer:stop on
manual
Você pode criar um
override
arquivo para desabilitar um serviço sem editar a definição do trabalho, apenas colocando amanual
palavra-chave nele.sysv-rc-conf
Tente usar sysv-rc-conf
e para começar a gerenciar os serviços, execute
Que abrirá uma janela interativa como esta
Você pode navegar ainda mais pelas páginas usando
Ctrl+n
para a próxima página eCtrl+p
para a página anterior. Você pode habilitar e desabilitar serviços selecionando osSPACE
níveis de execução desejados.Jobs-Admin
Outra alternativa seria Jobs-Admin instalando através
Que também fornece GUI como esta
Para mostrar mais trabalhos, você deve marcar Mostrar Trabalhos Protegidos em seu menu.
chkconfig
E a terceira opção seria chkconfig ,
It can be used via CLI
chkconfig
, showing list of On/Off jobs. Also we can view system services usingchkconfig –list
Services can be turned on using
Services can be turned off using
And we can even add our own service, using a proper init script with proper headings.
update-rc.d
And another option can be referred here update-rc.d , explained briefly here.
Note that for Ubuntu Server 12.04,
update-rc.d
is used instead of chkconfig.Para aqueles de nós que executam o Ubuntu sobre ssh, acho que a melhor opção é
rcconf
- um programa baseado em texto: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 blogpost , 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 desejar alterá-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/*
- aqueles que não são links simbólicos).Felizmente, muitos dos serviços que são relevantes ao fazer ssh em um servidor (Apache, Tomcat, mdadm, boinc-client...) ainda não foram movidos para upstart.
Descobri que até biônico existe essa ferramenta GUI, algo como BUM mas compatível com Upstart: Jobs-Admin
Editing the existing upstart configuration file (as described above) is not such a good idea. An updated package could provide an updated config, and you'd had to repeat your changes over and over.
By taking a look at
man 5 init
one will find a more appropriate solution: using an override config. Short example: Say we have a service called "foobar", so there would be a file called/etc/init/foobar.conf
with its upstart configuration. Now you don't want to remove that file, nor to modify it -- but neither you want this service to run? So place an override file next to it:/etc/init/foobar.override
, containing (optionally the header with the description and) instead thestart on
/stop on
lines you place a line with one word:manual
. This way you tell upstart to basically use thefoobar.conf
, but override the startup definition to only start that service when manually enforced (viaservice foobar start
in our example).There is also the Boot-Up Manager.
To install:
sudo apt-get install bum
Mais informações: http://www.marzocca.net/linux/bum.html
O método mais simples para mim, pois uso apenas o CLI, é
update-rc.d
.Para habilitar ou desabilitar a inicialização automática na reinicialização, etc:
Exemplo:
Para parar ou iniciar um daemon ou verificar seu status:
Exemplo:
update-rc.d
pode fazer um pouco mais do que o básico mostrado acima:Como sempre; você pode consultar a página de manual .
Eu uso Stacer :
Ele mostra serviços e processos também. Uma caixa de ferramentas completa do sistema GUI.