Atualmente, existem três maneiras diferentes de o software ser iniciado como um serviço no Ubuntu, SysV, Arrivista 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 use o update-rc.d
comando (ou em distros baseadas em RedHat, chkconfig
) para ativá-lo ou desativá-lo.
Este 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ê correr ls /etc/rc2.d
você pode ver a ordem em que os Serviços serão mortos com um nome de arquivo como K##xxxx
e começou com nomes de arquivos S##xxxx
. O ##
em S##xxxx
significa uma "ordem de início" 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 SysV foi isso 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 eram aleatórias e difíceis de aproveitar ao máximo. Esta foi a principal razão pela qual Arrivista foi criado.
Arrivista
Upstart usa arquivos de definição de trabalho em /etc/init
para definir 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 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 iniciais 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 desativá-lo!
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 trabalho convertidos, e a parte mais agradável é que ele permite que você se livre de todo o script "magic" e apenas coloque 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 samba, foram 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, ele vai mostrar isso:
$ status statdstatd start/running, process 942
Mas se não for, você verá algo mais assim:
$ status apache2status: Unknown job: apache2
Neste caso, apache2
não foi convertido em arrivista. Então, para desativar apache2
você acabou de correr
sudo update-rc.d apache2 disablesudo service apache2 stop
Desativar serviços (jobs) no upstart
As definições de trabalho iniciais não têm um 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ê quiser ainda ser capaz de iniciá-lo manualmente, então você precisa comentar o start on
condicao. Digamos que você deseja instalar samba, mas não tê-lo iniciar automaticamente. Aqui está o arquivo de trabalho (em natty):
description "SMB/CIFS File Server"author "Steve Langasek <steve.langasek@ubuntu.com>"start on local-filesystemsstop on runlevel [!2345]respawnpre-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/sambaend scriptexec smbd -F
Desactivar samba, você pode apenas colocar um #
na frente do "start on local-filesystems
". Observe que, embora não inicie o backup 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, eu sugiro realmente remover o pacote. Se, no entanto, você quiser que ele seja instalado, mas não iniciável, você também pode fazer:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Desative um serviço usando a estrofe iniciar / parar (a partir de 11.04)
Começando com a versão do upstart que será em 11.04, há uma nova palavra-chave que desativa o start on
e stop on
estrofe: manual
. Portanto, outra maneira de desativar o serviço a partir de 11.04 é fazer:
echo 'manual' | sudo tee /etc/init/mysql.override# command from root shellecho manual >> /etc/init/mysql.override
Você pode criar um override
arquivo para desativar um serviço sem editar a definição do trabalho, apenas colocando o manual
palavra-chave nele.