16 – Inicialização, init, runlevels, init.d, inittab e telinit – Linux

Inicialização, init, runlevels, init.d, inittab e telinit

Um runlevel (nível de execução) é um modo de operação do sistema que define quais serviços do sistema estarão disponíveis (rodando). Os runlevels são identificados por números, de 0 a 6.

Podemos usar os níveis de execução para decidir quais subsistemas irão rodar na máquina, como por exemplo decidir se a GUI irá ser executada (X Window System), se a rede estará operacional, se mais de um usuário poderá se logar no sistema, desligar e reiniciar, etc.

A tabela a seguir mostra os níveis de execução de acordo com a especificação LSB (Linux Standard Base) e seus significados:

Runlevel

Significado

0

Desligar o sistema

1

Modo de usuário único (modo de manutenção)

2

Modo multiusuário sem rede

3

Modo multiusuário com rede

4

Não usado

5

Modo multiusuário completo com GUI (runlevel 3 com interface gráfica)

6

Reiniciar o sistema

Na verdade, os runlevels de 2 a 5 podem variar dependendo da distribuição Linux considerada.

Todo sistema Linux suporta três níveis de execução básicos (0,1 e 6) e mais um runlevel (no mínimo) para operação normal do sistema.

Veja, na tabela a seguir, os níveis de execução definidos em uma distribuição Debian, como a usada nos nossos exemplos aqui:

Runlevel

Significado

0

Desligar o sistema

1

Modo de usuário único (modo de manutenção)

2 a 5

Modos multiusuário completos (com ou sem GUI)

6

Reiniciar o sistema

Os serviços que serão inicializados em cada runlevel são definidos pelo conteúdo de vários diretórios rcX.d, com X variando de 0 a 6, que se localizam dentro de /etc/ em sistemas Debian e derivados.

Vejamos o conteúdo de um desses diretórios, como o /etc/rc0.d:

Veja que há uma série de itens cujo nome se inicia com a letra K. Em outros diretórios há também itens cujo nome se inicia com S. Vamos olhar os detalhes desses itens usando o comando ls -l:

Notamos que os itens são na verdade atalhos para usa série de arquivos localizados no diretório /etc/init.d/. Esses arquivos são scripts de inicialização e finalização individuais para cada serviço do sistema, que são executados quando o sistema entra no runlevel associado.

Quando o nome do link se inicia com a letra K (kill), trata-se de um serviço que será finalizado, se estiver rodando, ao entrar no runlevel.

Se o nome do link se iniciar com a letra S (start), trata-se então de um serviço que será inicializado quando o sistema entrar no nível de execução associado.

O formato geral dos nomes desses arquivos é então:

KNNnome e SNNnome, onde:

– Letras K e S: como descrito acima;

– NN: Número de sequência, com dois dígitos, que especifica a ordem relativa para iniciar ou finalizar os serviços. Números mais baixos indicam scripts que serão executados primeiro. Caso haja repetição de números, a ordem alfabética será usada.

– nome: Nome para identificação dos serviços.

Vejamos o conteúdo do diretório /etc/rc2.d/:

Temos neste diretório vários links iniciados com a letra S, indicando serviços que devem ser iniciados quando o sistema entrar no nível de execução 2.

Definir o nível de execução padrão:

Quando o sistema é iniciado, o processo init (primeiro processo do sistema)  levará o sistema a um runlevel padrão, o qual é configurado no arquivo /etc/inittab, na linha a seguir:

Veja que o meu sistema, por padrão, entra no nível de execução 2 de acordo com o arquivo inittab.

Podemos alterar o runlevel padrão editando esse arquivo e trocando o número do nível de execução nesta linha pelo runlevel desejado.

CUIDADO!!!: Nunca configure os runlevels 0 ou 6 no arquivo /etc/inittab, pois seu sistema não conseguirá mais inicializar corretamente!

Para verificarmos o runlevel atual do sistema, digite o comando runlevel no console:

$ runlevel

No exemplo acima, o número 2 indica que o runlevel atual é 2, e a letra N indica o runlevel em que o sistema se encontrava antes de entra no nível 2 (neste caso, nenhum), informação lida no arquivo /var/run/utmp.

Podemos alterar o runlevel do sistema pela linha de comandos usando comandos como o init e o telinit, que você pode conferir clicando aqui.

Gerenciando os links de runlevel no Debian

Podemos gerenciar os links de scripts de nível de execução usando o utilitário sysv-rc-conf, que pode ser instalado com o comando a seguir:

# apt-get install sysv-rc-conf

E aberto com o comando:

# sysv-rc-conf

Com esse utilitário podemos consultar e também ativar ou desativar scripts em cada nível de execução no console com facilidade. Veja a tela do utilitário em execução:

Basta navegar pelos itens com as setas de direção do teclado, e com um toque na barra de espaços você pode ativar ou desativar os scripts de acordo com o runlevel que é mostrado no cabeçalho das colunas.

Consulte as páginas do manual referente ao utilitário para mais opções:

$ man sysv-rc-config

Comandos init e telinit

Os comandos init e telinit permitem colocar o sistema em um nível de execução desejado, de 0 a 6, ou S e s, que são equivalentes ao runlevel 1. Na verdade, o telinit é um link para o init como podemos ver na figura abaixo:

Um nível de execução é uma configuração de software do sistema que permite que apenas um grupo selecionado de processos existam em um dado momento,

Sintaxe do comando init:

init [valor]

Onde [valor] é o número do nível de execução desejado ou uma outra opção, como:

  • Q ou q   Diz ao init para re-examinar o arquivo /etc/inittab
  • S ou s Alternar para o modo de usuário único (single mode)
  • U ou u Diz ao init para reexecutar a si mesmo, preservando o runlevel atual.
  • a,b,c Diz ao init para processar apenas as entradas de arquivos no arquivo /etc/inittab que tenham os runlevels a,b ou c.

Exemplos:

Desligar o sistema:

# init 0

Reiniciar o sistema

# init 6

Reler o /etc/inittab:

# init q

Recarregar a si próprio:

# init u

Entrar em modo de usuário único:

# init 1

ou

# init S

O comando telinit, por se tratar de um atalho para o init, funciona da mesma maneira:

Exemplo:

Desligar o sistema:

# teliinit 0

Reler o /etc/inittab:

# teliinit q

Porém o telinit pode dizer ao init quanto tempo ele deve esperar entre o envio de um sinal SIGTERM aos processos e o envio de um sinal SIGKILL. O padrão é 5 segundos, mas isso pode ser alterado com a opção -t, por exemplo para 10 segundos ao reiniciar o sistema (runlevel 6)::

# telinit -t 10 6

Você pode assistir a um vídeo sobre o assunto para se aprofundar mais:

 

 

Sobre Fábio dos Reis (1082 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Astronomia, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*