LPIC 1 - 101.3 ALTERNAR RUNLEVELS, DESLIGAR E REINICIAR O SISTEMA

Para este tópico, iremos aprender os níveis de execução do sistema, alterar os níveis de execução, desligar/reiniciar o sistema via linha de comando, enviar mensagens de alertas para os usuários e aprender um pouco sobre os tipos de sistemas de inicialização - Systemd, Upstart.

Peso 3

Assim que é dado o boot e o kernel toma conta da máquina, um programa chamado init é acionado. Esse programa roda em um nível de interação com o usuário, que chamamos de runlevel.
Os runlevels indicam qual scripts devem ser executados. Por exemplo: se o seu sistema quebrou e não inicializa mais ou se você adicionou um novo kernel no sistema e precisa configurar alguns módulos, é necessário que o sistema seja inicializado no runlevel 1. Para isso, basta que você altere alguns parâmetros na tela de inicialização do grub e indique qual runlevel seja carregado.

O sistema tem também o runlevel default já definido no arquivo /etc/inittab. A entrada que define o nível de execução é da seguinte maneira:

id:2:initdefault:

Ou:
id:runlevel:ação:processo

Onde:
id - identificador exclusivo de um a quatro caracteres
runlevel - nível de execução do sistema (0 a 6)
ação - qual ação será realizada
processo - informa qual o processo será executado após a ação ser executada

Possíveis ações:

respawn - reinicia o processo após o término
wait - inicia o processo ao entrar no nível de execução e espera por seu término
once - inicia o processo uma vez ao entrar no nível de execução especificado
initdefault - especifica o nível de execução após o boot
ctrlaltdel - executa o processo associado quando o init receber o sinal SIGINT, quando alguém pressionar crtl+alt+del

Os níveis de execução do sistema

0 - indica o desligamento do sistema;
1, S, s - modo monousuário. Quando apenas um usuário (single mode) loga no sistema para fazer manutenção.
2 - modo multi-usuário. Esse é o runlevel padrão do Debian.
3 - modo multi-usuário, padrão do Red Hat, sem interface gráfica.
4 - utilizado como configuração alternativa
5 - modo multi-usuário, padrão do Red Hat e Debian com interface gráfica
6 - reinicialização do sistema

Para verificar o nível de execução atual do sistema, utilizamos o comando runlevel.
A saída será N 2, onde:
N - indica o nível de execução anterior
2 - o nível de execução atual.

PS: Jamais coloque no arquivo /etc/inittab os runlevels 0 ou 6. Isso fará com o sistema desligue ou reinicie.

Os diretórios /etc/rc0.d...rc1.d...rc2.d...rc6

Conforme o nível de execução, scripts são executados com o nível correspondente. Dentro do diretório /etc, existem vários diretórios rc's que contém scripts. Se olharmos dentro desses diretórios, veremos arquivos com a seguinte nomenclatura K01atd, K01alsa-utils, S01minissdpd, S01motd etc. Esses arquivos são links simbólicos para arquivos dentro de /etc/init.d.
A nomenclatura desses links se dão da seguinte forma: se o arquivo começar com S, significa que o serviço será iniciado (start). Se for K, o serviço será interrompido, parado (stop).

Esses arquivos tem um formato comum:
KNNnome_do_serviço
SNNnome_do_serviço

Onde:
NN - número de dois dígitos que indicam a ordem de qual serviço será iniciado primeiro. Em caso de números iguais, o sistema segue pela ordem alfabética.
nome_do_serviço - identificação do serviço.


Telinit

Podemos alterar também o nível de execução do sistema com ele funcionando. Para isso, utilizamos o comando telinit x, onde x é o nível desejado (0 a 6). Como dá para perceber, podemos utilizar o comando telinit para desligar ou reiniciar o sistema:

telinit 0 ou telinit 6

Desligamento e Reinicialização

Para desligarmos ou reinicializarmos o sistema, utilizamos o comando shutdown seguido das opções -h ou
-r respectivamente. Ao utilizarmos o comando shutdown, ele notifica os usuários logados do sistema que o será desligado e novos logins são bloqueados.

Além disso, ele envia um sinal SIGTERM para todos os processos (para salvar arquivos, configurações) e em seguida um sinal SIGKILL, para finalizar algum processo travado.

É possível ainda programar o sistema para desligar dentro de um determinado período de tempo. Para isso, utiliza-se o seguinte parâmetro:

shutdown opção horário

Opções:

hh:mm - hora e minutos para a execução
+m - minutos
-t - segundos
-r - reinicia a máquina
-h - desliga a máquina
now ou +0 - para execução imediata

Exemplo de uso: shutdown -h now

Usuários que terão permissão para desligar ou reiniciar a máquina, deverão ter editadas suas permissões dentro do arquivo /etc/shutdown.allow.

O Systemd

Falamos um pouco do systemd no tópico passado. Ele substitui o init e muda como o sistema inicializa (através da paralelização de processos). O systemd é um gerenciador de sistema compatível com o padrão SysV e LSB. Além da capacidade de paralelização, ele utiliza ativação por sockets e D-Bus para iniciar serviços, disparo dos daemons sob demanda, suporte a snapshots e restauração do sistema, monitoramento de processos por cgroups, controle dos pontos de montagem e etc.

Ele dá início e supervisiona todo o sistema e é baseado em conceito de unidades. Essas unidades são compostas por um nome e um tipo, possuindo arquivos de configuração correspondente. Ou seja, a unidade de processo de um servidor Apache será httpd.service ou de um servidor SSH será sshd.service.

Parâmetros do systemd

systemctl start - inicio um serviço
systemctl stop - para um serviço
systemctl restart - reinicia um serviço
systemctl status - mostra o status atual do serviço
systemctl enable - habilita o serviço no boot
systemctl disabled - desabilita o serviço do boot
systemctl is-enable - verifica se determinado serviço está ativo no boot

Nível de execução

O systemd não trabalha com níveis de execução do sistema. Ele utiliza targets (agrupamentos de unidades controladas em conjunto) para cada situação. Para alterarmos os diferentes targets, utilizamos o comando systemctl isolate target. É bem similar ao conceito dos runlevels, pois a target correspondente ao runlevel 3 seria a target multi.user.target.

Observações importantes sobre o systemd

Os targets disponíveis se encontram dentro do diretório /lib/systemd/system. O systemd não utiliza o arquivo /etc/inittab.
Para visualizar todos targets carregados e ativos no sistema, utilizamos o comando systemctl list-units --type=target.

Upstart

O Upstart é um gerenciador de serviços que tem o mesmo objetivo do systemd, que é o tornar o boot mais rápido através da paralelização. Os scripts de inicialização ficam dentro do diretório /etc/init.

Para o controle dos serviços em sistemas que usam o upstart, utilizamos os comandos:

stop, start, status - interrompe, inicia e exibe o status do serviço respectivamente.

Para listar os serviços que estão iniciados, usa-se o comando initctl list. Assim como o systemd, o upstart não utiliza mais o arquivo /etc/inittab. Para configurar os níveis de execução, o upstart utiliza arquivos para cada item que estava no /etc/inittab. Esses arquivos ficam agora em /etc/event.d.

Apesar de não mais utilizar o /etc/inittab, é possível verificar e alterar o nível de execução com o comando runlevel e telinit, respectivamente.



Comentários