Todos os arquivos relacionados a
inicialização do sistema estão localizados no diretório
/etc/rc.d
. Aqui está a listagem dos arquivoss:
$ ls /etc/rc.d init.d/ rc0.d/ rc2.d/ rc4.d/ rc6.d/ rc.local* rc.sysinit* rc* rc1.d/ rc3.d/ rc5.d/ rc.alsa_default* rc.modules*
Como já declarado anteriormente, o
rc.sysinit
é o primeiro arquivo a ser
executado pelo sistema. Ele é responsável pela configuração básica
da máquina: tipo de teclado, configuração de certos dispositivos, verificação de sistemas de arquivo, etc.
Então o script
rc é executado utilizando como argumento o
nível de execução desejado. Como já vimos, o nível de execução é
um inteiro simples, e para cada nível <x>
definido, deve haver um diretório
rc<x>.d
correspondente. Em uma
instalação típica do Mandriva Linux, você pode ver que há seis
níveis de execução:
1: modo monousuário. Para ser utilizado em casos de problemas graves ou recuperação do sistema.
2: modo multiusuário, sem suporte a rede.
5: como o nível de execução 3, mas com a diferença de que executa a interface gráfica de login.
Vamos dar uma olhada no
conteúdo do diretório rc3.d
:
$ ls /etc/rc.d/rc3.d/ K09dm@ S12syslog@ S24messagebus@ S40atd@ S91dictd-server@ S01udev@ S13partmon@ S25haldaemon@ S55sshd@ S92lisa@ S03iptables@ S15cups@ S25netfs@ S56ntpd@ S95kheader@ S05harddrake@ S17alsa@ S29numlock@ S56rawdevices@ S99local@ S10network@ S18sound@ S33nifd@ S75keytable@ S11shorewall@ S20xfs@ S34mDNSResponder@ S90crond@ $
Como você pode ver, todos os arquivos neste diretório são links simbólicos, e todos eles possuem uma forma muito específica. A forma geral deles é:
<S|K><order><service_name>
O S
significa iniciar (Start) o serviço,
e o K
significa matá-lo
(Kill), parar o serviço. Os
scripts são executados em uma ordem numérica ascendente, e se dois
scripts possuem o mesmo número, uma ordem alfabética será
utilizada. Nós também podemos ver que cada link simbólico aponta
para um script localizado no diretório
/etc/init.d
(algum que não seja o script
local que é responsável por controlar um
serviço específico).
Quando o sistema entra em um
certo nível de execução, ele começa executando os links
K
em ordem: o comando rc
verifica para onde o link está apontando, e então chama o script
correspondente com um único argumento:
stop
. Ele então executa os scripts
S
utilizando o mesmo método, exceto aqueles que
os scripts são chamados com um parâmetro start
.
Então, sem examinar todos os
scripts, nós podemos ver que quando o sistema entra no nível de
execução 3, ele primeiro executa o comando
K09dm, (por exemplo, /etc/init.d/dm stop). Depois, ele executa todos os
scripts S
: primeiro o S01udev,
que por sua vez chama o /etc/init.d/udev start,
então o S03iptables, e assim por diante.
Armado com esta informação, você pode criar seu próprio nível de execução em poucos minutos (utilizando o nível 4, por exemplo), ou evitar que um serviço inicie ou pare deletando o link simbólico correspondente.
Você também pode utilizar o comando
chkconfig para adicionar, remover, ativar ou
desativar os serviços de um certo nível. Use chkconfig
--add nome_do_serviço para adicionar (ativar) o serviço
nome_do_serviço
para todos os níveis de execução
suportados[30] e chkconfig --del
nome_do_serviço para remover (desativar) o serviço indicado
de todos os níveis de execução.
![]() | Dica |
---|---|
Execute chkconfig --list para saber quais serviços estão disponíveis, o seus nomes, e o status de cada um em todos os níveis de execução definidos. |
Executando o comando chkconfig --levels
35 sshd on irá ativar o servidor SSH
(sshd
) nos níveis de execução 3 e 5, enquanto o
comando chkconfig --levels 3 sound
off removerá o suporte a som do nível de execução 3. Se
você omitir o parâmetro --levels lista_de_níveis
,
o serviço nomeado será ativado ou desativado nos níveis 2, 3, 4 e
5. Note entretanto, que você pode terminar habilitando serviços
nos niveis sem suportar devidamente estes serviços, então é
melhor especificar os níveis de execução que devem ser alterados.
Serviços podem ser controlados em um sistema que já está em execução através do comando service, estejam eles configurados ou não para serem executados em um nível de execução particular. Sua sintaxe é a seguinte:
service nome_do_serviço ação
Onde nome_do_serviço
é o nome do serviço a ser controlado, escrito da mesma forma que a listada no chkconfig --list, e ação
pode ser:
Inicia o serviço indicado. Note que, se você tentar iniciar um serviço que já está em execução, o sistema lhe avisará disto. Se a intenção for reiniciar o serviço, utilize o restart
, como mostrado abaixo.
Pára o serviço indicado. Note que todos os usuário conectados a este serviço serão automaticamente desconectados quando você pará-lo.
Pára e inicia o serviço indicado. É o equivalente a executar service nome_do_serviço stop && service nome_do_serviço start. Note que todos os usuários conectados ao serviço serão automaticamente desconectados quando o serviço reiniciar.
Serviços diferentes suportam ações
diferentes (as anteriores são suportadas por todos os tipos de
serviços). Por exemplo, reload
para recarregar
o arquivo de configuração de um serviço;
force-stop
para forçar o desligamento do serviço;
status
para verificar o estado do serviço no
momento; etc. Execute service nome_do_serviço
para ser informado de todas as ações suportadas por ele.
[30] Níveis de execução “suportados” significam que, por exemplo, um serviço de rede não seria adicionado ao nível de execução 2, que não suporta rede.