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.d
e, em seguida, usar o update-rc.d
comando (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.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 ##
in S##xxxx
significa uma "ordem inicial" para o serviço xxxx
. Por outro lado, o ##
in K##xxxx
significa 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/init
para 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, apache2
não foi convertido para inicial . Então, para desativar, apache2
basta 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.d
comando. 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 on
condiçã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 <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
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 on
e stop on
estrofes: 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 override
arquivo para desativar um serviço sem editar a definição da tarefa, apenas colocando a manual
palavra-chave.