16 – Inicialização, init, runlevels, init.d, inittab e telinit – Linux
Inicialização, init, runlevels, init.d, inittab e telinit
No Linux, 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:
# 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:
Escreva um comentário