2. Níveis de Execução

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:

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.

2.1. Configurando Serviços nos Níveis de Execução

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]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.

2.2. Controlando Serviços em um Sistema em Execução

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:

start

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.

stop

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.

restart

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.

outras ações que são dependentes de serviço

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.