Inicialização e interrupção do sistema (Debian)

Tenho visto muitas dúvidas e perguntas sobre como colocar um script ou um aplicativo para iniciar no boot. Tenho visto algumas respostas que apesar de funcionarem, não creio que sejam a melhor alternativa para alguns casos. Por isso resolvi escrever esse artigo, tentando explicar o processo de inicialização e interrupção do Linux.

[ Hits: 43.202 ]

Por: Geraldo José Ferreira Chagas Júnior em 02/04/2008 | Blog: http://prginfo.blogspot.com


Processo de inicialização



Aqui iremos mostrar como o Linux começa a preparar o sistema para o uso, através do script de partida. Importante é observar o uso de variáveis que indicam o nível de execução ou estados do sistema.

O estado do sistema surgem da necessidade de separar a forma com que o sistema é percorrido, de acordo com a forma de manutenção que está sendo executada. Você vai encontrar uma descrição de vários níveis de execução no arquivo /etc/inittab.

# Runlevel 0 is halt. ( desligar )
# Runlevel 1 is single-user. ( mono usuário )
# Runlevels 2-5 are multi-user. (sendo que 2 é multiusuário sem NFS, será igual ao nível 3 se você não utilizar rede - 3 modo multiusuário completo - 4 não é usado, é para caso necessite configurar um especial - 5 é o modo X11)
# Runlevel 6 is reboot. (reboot

Quem usa o Linux em modo texto, como no caso de servidores, deve ainda encontrar a linha:

id:3:initdefault:

Essa linha indica que após carregar o núcleo (kernel) do sistema, o Linux deve ser executado, por padrão, em nível 3. Entretanto o pessoal que usa em modo gráfico deve ter a linha indicando para carregar em modo X11, ou seja, nível de execução 5. Esses níveis padrão são configurados na instalação do sistema. Dessa forma a linha que aparecerá, para modo gráfico, deve ser:

id:5:initdefault:

Agora veremos os níveis de execução, incluindo o primeiro script de partida na tabela de inicialização do sistema, o /etc/rcS/*, que é executado uma vez na hora da inicialização pelo comando init. A estrutura de diretório /etc/rcX.d e o que esses scripts fazem.

O init é o "pai de todos os os processos" e seu primeiro papel é carregar os processos armazenados no script /etc/inittab. Muito da forma com que o Linux carrega seus processos após a carga do núcleo vem de outro UNIX, System V. Na realidade o init do Linux é compatível com o init do System V.

Você pode ver evidências desse processo usando o comando pstree.

# pstree
init-+-cpid
     | pache2 *[apache2]
     | atd
     | cron
     | cupsd usb
     |events/0
...

Mesmo não estando toda a saída do comando pstree mostrada aqui, verificamos que o init é o pai de todos os processos, é dele que partem todos os processos subsequentes. O init trabalha analisando o script /etc/inittab e executando os scripts de /etc/rcX.d de acordo com o default ou com o nível de execução desejado. Cada script pode iniciar ou parar o serviço, como um serviço de impressão, compartilhamento de internet, serviço de rede etc.

Aqui está a lista de diretórios rc* de /etc/:

rc0.d/
rc1.d/
rc2.d/
rc3.d/
rc4.d/
rc5.d/
rc6.d/
rc.local
rcS.d/

Os diretórios rc's contém vários scripts para iniciar ou parar um processo, os detalhes de cada um não serão mostrados aqui, mas você poderá descobrir a função de cada um pelo nome do arquivo ou pelas curtas descrições contidas dentro deles.

A quantidade de scripts depende do número de pacotes escolhidos na instalação do sistema.

Em geral, cada script está destinado a responder a comandos da seguinte forma:

<script> {start | stop | status | restart }

Assim, esses scripts podem ser controlados por outros programas ou scripts, dependendo da sintaxe usada.

Ao ler o arquivo /etc/inittab após a linha:

id:X:initdefault:

que define qual o nível de execução default, encontra-se a linha:

si::sysinit:/etc/init.d/rcS

que indica que a primeira tarefa a ser executada pelo sistema de inicialização será carregar os scripts deste diretório. Esses scripts são os responsáveis por:
  • Ajustar algumas variáveis $PATH iniciais;
  • Configurar a conexão com a rede;
  • Ajustar clock do sistema;
  • Carregar configuração de teclado;
  • Começar a troca pela memória virtual;
  • ...

se usarmos o comando "ls -l" no diretório /etc/rcS.d será mostrada uma saída aproximadamente assim:

S01glibc.sh -> ../init.d/glibc.sh
S02hostname.sh -> ../init.d/hostname.sh
S02mountkernfs.sh -> ../init.d/mountkernfs.sh
S03udev -> ../init.d/udev
S04mountdevsubfs.sh -> ../init.d/mountdevsubfs.sh
S05bootlogd -> ../init.d/bootlogd
S05keymap.sh -> ../init.d/keymap.sh
S07hdparm -> ../init.d/hdparm
S10checkroot.sh -> ../init.d/checkroot.sh
S11hwclock.sh -> ../init.d/hwclock.sh
S12mtab.sh -> ../init.d/mtab.sh
...

A próxima tarefa do init será carregar os scripts do nível de execução determinado.

Se você observar a lista de diretórios rc em /etc, verá vários diretórios rcX.d, onde X é um número de 0 a 6.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Processo de inicialização
   3. Diretórios rcX.d
   4. Níveis de execução
   5. Como interromper o sistema
   6. Notas finais
Outros artigos deste autor

Instalando e configurando o aMule (Debian)

Vírus de computador e criação de um vírus em C/C++ (parte 1 - básico)

Configurando Servidor de Nomes - DNS (Debian)

Montando um ambiente utilizando Tomcat + Java + MySQL (Debian)

X Window, Controladores de Janelas e Ambientes Desktop

Leitura recomendada

Diferenças entre Gentoo e Funtoo

DesktopBSD - opção ao FreeBSD para desktops

Lidando com compactação de arquivos no Linux

Mageia 6 - 6 dicas de pós-instalação

Completando o Ubuntu (para principiantes)

  
Comentários
[1] Comentário enviado por exercitobr em 03/04/2008 - 08:55h

Muito interessante e bem explicado, parabéns!

[2] Comentário enviado por Andre_A_Ferreira em 03/04/2008 - 09:18h

?comentario=Excelente contribuição, as vezes precisamos entender simples funcionamento para desenvolver complexos sistemas.
Parabéns.

[3] Comentário enviado por brnlino em 04/04/2008 - 12:53h

Show de bola esse seu Artigo,
ainda irei criar uma artigo nesse nivel.


Parabens mesmo.

[4] Comentário enviado por .pedrao em 23/07/2008 - 09:07h

Muito bom mesmo cara...aliás, muito bom é pouco, eu tava precisando muito destas informações e tava difícil de encontrar...
Brigadão ae.. de verdade!!! XD


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts