Nível de inicialização (runlevel)

Os sistemas Linux são inicializados obedecendo à uma configurações de inicialização chamadas de runlevel, este termo determina quais serviços e componentes serão carregados durante a inicialização do sistema operacional.

Em um sistema padrão System V os níveis de inicialização são:

  • Nível 0: desliga o sistema;
  • Nível 1 ou S: carrega os serviços mínimos essenciais ao sistema. Geralmente este nível de inicialização é utilizado para a manutenção do sistema;
  • Níveis 2 a 5: multiusuário;
  • Nível 6: reinicia o sistema;

Onde o runlevel padrão é definido?

No Ubuntu o runlevel é definido dentro do arquivo: “/etc/init/rc-sysinit.conf”, na linha “env DEFAULT_RUNLEVEL=2”, onde o dois indica o runlevel padrão.

No Debian, Fedora e derivados o nível de inicialização padrão é definido no arquivo “/etc/inittab” na linha: “id:2:initdefault:”, onde o dois indica o runlevel padrão.

Se você modificar esse arquivo ele só terá validade depois que o sistema for reinicializado. Para não precisar reinicializar o sistema utilize o seguinte comando:

# init q

Como mudar o runlevel com o sistema em execução?

Mesmo com o sistema em execução é possível trocar de runlevel, para isso basta executar como root o seguinte comando:

# init 5

O número cinco representa o runlevel para o qual você esta “migrando”. Esta mudança não é definitiva, ou seja, se você reiniciar a máquina voltara para o runlevel padrão, definido no (etc/init/rc-sysinit.conf ou /etc/inittab dependendo da distribuição).

Como definir quais serviços serão ou não inicializados com o sistema?

No mundo GNU/Linux é possível determinar quais serviços serão ou não inicializados com o sistema. O grande problema de deixar muitos serviços inicializando junto com o sistema é que o processo de boot fica mais lento, sendo assim a dica é, mantenha somente os serviços que são necessários inicializando automaticamente.

Para determinar quais serviços serão ou não inicializados com o sistema podemos utilizar os seguintes comandos:

No Red Hat/Fedora, a ferramenta usada é o “chkconfig“;
No Debian, Ubuntu e derivados a ferramenta usada é o “update-rc.d“. Caso você prefira utilizar o chkconfig nessas distros basta fazer a instalação utilizando “apt-get” ou “aptitude“. Eu pessoalmente gosto mais de utilizar o chkconfig mesmo no Debian ou Ubuntu, sendo assim será preciso fazer sua instalação:

# aptitude install chkconfig

Para listar todos os serviços que estão ou não inicializando com o sistema utilize o comando:

# chkconfig –list

Este comando mostrara quais serviço estão inicializando com o sistema em determinado runlevel. Ao digitar esse comando diversos serviços foram listados, selecionei aqui um deles, o cron:

cron 0:off 1:off 2:off 3:off 4:off 5:off 6:off

O serviço aqui listado é o cron (gerenciador de tarefas do GNU/Linux), este serviço está off (desativado) em todos os runlevel.

Para ativar ou desativar a inicialização automática de um serviço utilize o seguinte comando:

# chkconfig –level 2 cron on
# chkconfig –level 2 cron off

O primeiro comando ativa o cron (serviço) para inicializar automaticamente no runlevel 2 e o segundo desativa o cron no runlevel 2. Lembrando que se você estiver utilizando por padrão o runlevel 3 o cron não subira automaticamente tendo em vista que ele foi configurado para inicializar somente no runleval 2. Para ativar ou desativar o serviço em mais de um runlevel você pode utilizar o seguinte comando:

# chkconfig –level 234 cron on
# chkconfig –level 234 cron off

Os números “234” são os runlevel especificados.

Para adicionar um serviço a todos os runlevel padrão (2 ,3, 4 e 5) utilize o comando:
Obs: Ao adicionar um serviço você também o esta ativando.

# chkconfig –add nome_do_servico

Para desativar o serviço em todos os runlevel padrão (2, 3, 4 e 5) utilize o comando:

# chkconfig nome_do_servico off

Para desativar um serviço de todos os runlevel com update-rc.d utilize o seguinte comando:

# update-rc.d -f nome_do_servico remove

=> Para ativar o serviço em todos os runlevel padrão (2, 3, 4 e 5) com update-rc.d utilize o seguinte comando:

# update-rc.d nome_do_servico defaults

=> Com o update-rc.d também é possível desativar ou ativar um serviço em determinado runlevel, para isso utilize o comando:

# update-rc.d 2 -f nome_do_servico remove
# update-rc.d 2 nome_do_servico defaults

No primeiro comando estamos removendo um serviço (nome_do_servico) do runlevel (2). Já no segundo comando estamos ativando um serviço (nome_do_servico) do runlevel (2).

Além deste comandos temos o “invoke-rc.d”, que funciona da mesma forma que o “update-rc.d“.