Aprenda a alterar os níveis de execução – Runlevels – no Linux, utilizando os comandos init do systemv

O Linux possui três grandes sistemas especiais de carga dos serviços durante o processo de boot e também responsável por iniciar todos os processos: System V Init Daemon, Systemd e Upstream (era utilizado no Ubuntu – não mais!).

System V Init Daemon

O System V Init Daemon foi herdado do UNIX, que recebeu o nome de System V init Daemon (System Five) ou simplesmente init.

Sua função básica é carregar os serviços durante o processo de carga do sistema, tais como o suporte a rede, multiusuários, apache, mysql, e demais serviços da máquina.

Durante o processo de carga do Linux, o sistema de boot (GRUB) carrega a imagem do kernel para a memória. Assim que o Kernel assume o controle da máquina, ele carrega um programa especial chamado init e que sempre tem o PID 1.

A partir daí, todos os outros processos executados na máquina são filhos do processo init, que tem o PID 1.

Isso porque, quando o usuário executa um programa, o kernel faz uma cópia do init através de um método chamado FORK e carrega o código de máquina do programa desejado em cima do código de máquina do clone do init que foi criado.

Você pode ver essa relação com o comando pstree:

# pstree

Runlevels no Linux

No Linux existem sete níveis de execução predefinidos de 0 a 6. Os serviços que cada runlevel pode executar vão depender da distribuição do Linux e da configuração que o administrador do sistema efetuou.

TABELA – Runlevels do Linux

# Descrição
0 O nível zero define um desligamento elegante e rápido do sistema.
1,s O nível um é utilizado para manutenção do sistema, também chamado de monousuário (single user). Somente o essencial é executado.
2 Modo multiusuário com compartilhamento de arquivos NFS desabilitado.
3 Modo multiusuário com todos os serviços habilitados, mas sem interface gráfica para o login no sistema.
4 Não utilizado.
5 Modo multiusuário com todos os serviços habilitados, interface gráfica X11 e login em modo gráfico.
6 O nível seis é parecido com o nível zero, mas executa o reboot da máquina.

Por padrão, as distribuições utilizam o nível 0 para uma sequência de desligamento (shutdown) elegante e o nível 6 para o reboot. E os runlevels 3 a 5 são utilizados para carga normal do sistema.

O nível 1 também conhecido como monousuário é utilizado para manutenções do sistema, como, por exemplo, recuperar uma partição de dados com problemas.

O administrador do sistema pode a qualquer momento alterar o nível de execução através do comando init seguido do número do runlevel desejado.

# init 5

ou

# telinit 6

O comando telinit é um link para o init.

É importante saber que a troca de nível de execução pode alterar os processos em execução e até desligar o sistema.

Quais Processos Serão Executados por cada Runlevel ?

Até agora aprendemos que o comando init pode alterar os processos em execução alterando os runlevels do sistema. Mas a definição de quais processos serão executados por cada nível de execução é feita pela hierarquia de diretórios /etc/rc.d e scripts de shell.

Quando o Linux inicia, uma série de scripts no diretório /etc/rc.d é executada para dar a carga no sistema. Vejamos estes arquivos e diretórios com detalhe:

O arquivo rc.sysinit é executado pelo processo init durante a carga do sistema e habilita funções essenciais. Por exemplo montar as partições de disco;

O arquivo rc.local é executado pelo script rc.sysinit. Ele é utilizado pelos administradores para eles modificarem os serviços na carga do sistema. Este arquivo tem preferência para esta tarefa uma vez que não é alterado durante um processo de atualização (upgrade) do sistema;

O arquivo rc é utilizado para transições entre os runlevels;

O diretório /etc/rc.d/init.d contém os diversos scripts que fazem a carga de todos os serviços do sistema operacional. Por exemplo o serviço de shell seguro SSH possui um script para carga do serviço com o nome sshd (Secure Shell Daemon). Este script e outros scripts podem aceitar como parâmetro comandos como start e stop. Outros serviços podem aceitar outros comandos como reload, restart, status etc.

Os níveis de serviço são definidos através dos diretórios /etc/rc<n>.d, onde <n> pode variar de 0 a 6, correspondendo aos runlevels.

Por exemplo /etc/rc0.d e /etc/rc1.d. Dentro da cada diretório de runlevel existem links simbólicos para os scripts dos serviços nos arquivos em /etc/rc.d/init.d.

Estes link simbólicos seguem o seguinte padrão:

[K|S]nn[nomedoscript]

Onde:

A letra K, de kill, indica que o script é para terminar um determinado serviço;

A letra S, de start, indica que o script é para carregar um determinado serviço;

Os números inteiros nn indicam a sequência de execução dos scripts, onde o menor número é executado primeiro. Se existirem no mesmo runlevel serviços com o mesmo número de ordem de execução, a ordem será indeterminada. A sequência dos números garante que um serviço que dependa de outro somente seja executado depois que a dependência seja satisfeita;

O nome do script para o link simbólico não é necessário para o funcionamento correto, mas para facilitar a leitura humana.

Por exemplo:

# /etc/rc.d/rc3.d/S23httpd -> /etc/rc.d/init.d/httpd

Para incluir um determinado serviço em algum runlevel desejado, você deverá copiar o script de carga para o diretório /etc/rc.d/init.d e criar um link simbólico para o script no runlevel desejado seguindo a nomenclatura acima.

Veja o exemplo:

# cp /usr/local/mailman/mailman.sh /etc/rc.d/init.d

# ln –s /etc/rc.d/init.d/mailman.sh /etc/rc.d/rc3.d/S25mailman

Definindo o Runlevel Padrão

O arquivo que define qual é o runlevel que o sistema assumirá durante a carga é o /etc/inittab. Neste arquivo procure a linha:

id:n:initdefault

Onde o n definirá o runlevel pelo seu número de 0 a 6. Nunca coloque neste arquivo o runlevel 0 ou 6 senão o sistema nunca entrará em produção.

Você poderá determinar em qual runlevel o sistema está em execução através do comando runlevel. Este comando retorna o nível de execução anterior e o nível de execução atual. Se o nível de execução permaneceu inalterado desde a carga do sistema, o nível anterior será mostrado como a letra N.

O comando runlevel não altera o nível de execução, mas somente informa. Para alterar utilize o comando init.

Gostou desta aula? Conheça todos os outros comandos do curso de LPIC 101. E veja como passar no exames da LPIC-1

Alterando Runlevels no Linux
Classificado como:                    

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.