Processo de inicialização do sistema e gerenciamento de serviços

centos6
    bios POST --mbr boot system --grub menu --load kernel --init processo de inicialização
    
centos7
    bios POST --mbr boot system --grub2 menu --load kernel --systemd processo de inicialização
    
1. Inicialização do sistema

1. BIOS (Basic Input Output System) autoteste de inicialização, inicialização de hardware, inicialização do sistema operacional

2. Leia e execute o bootloader do MBR (Master Boot Record) no primeiro dispositivo de boot
(programa grub: Grand unified bootloader) 

3. Carregue o kernel de acordo com as configurações do bootloader, e o kernel começa a detectar o hardware e carregar o driver

As principais funções do carregador de inicialização são as seguintes:
    Fornecer um menu: o usuário pode escolher diferentes itens de inicialização
    para carregar o arquivo principal: apontar diretamente para a área do programa inicializável para iniciar o sistema operacional
    Transferir para outros carregadores: transferir a função de gerenciamento de inicialização para outros carregadores

O local de armazenamento do kernel no Linux é a partição /boot. Existem dois arquivos principais a serem carregados:
    vmlinuz-3.10.0-514.el7.x86_64 arquivo do kernel
    initramfs-3.10.0-514.el7.x86_64.img sistema de arquivos virtual

Você pode usar: comando lsinitrd para visualizar o sistema de arquivos virtual.
[root@localhost boot]# lsinitrd initramfs-3.10.0-957.el7.x86_64.img

Se for um programa de inicialização sysvinit (versão linux6)
4. O kernel inicia o processo init
5. Inicialização do sistema
6. Init encontra o arquivo /etc/inittab e determina o nível de operação do sistema (X)
7. Aciona o evento de nível de operação correspondente e executa o script em /etc/rcX.d 8. Executa o
arquivo /etc/rc.local para acessar a interface de login
9. Digite o nome de usuário e a senha para entrar no sistema    

Se for o programa de inicialização systemd (versão Linux7),
o GRUB2 é aprimorado em comparação com a geração do GRUB: mais robusto, portátil e mais poderoso. Suporta
BIOS, uEFI e OpenFirmware, suporta tabela de partições GPT e MBR. Suporte a sistemas não-Linux
, como o sistema de arquivos HFS da Apple e o sistema de arquivos NTFS do Windows,
o systemd é o sistema de inicialização mais recente (init) no sistema Linux. Seu principal objetivo de design
é superar as deficiências inerentes do sysvinit e melhorar a velocidade de inicialização do sistema. systemd e
o novato do ubuntu são concorrentes, mas hoje o ubuntu também usa

4. Depois que o driver de hardware for carregado com sucesso, o kernel chamará ativamente o programa systemd e inicializará com o processo default.target
.  
5. systemd executa sysinit.target para inicializar o sistema e basic.target para preparar o sistema operacional .



------------------------------------------

Diferença entre Init e Systemd

iniciar

1. O tempo de inicialização é longo, o init é uma inicialização serial e o próximo processo só será iniciado após o processo anterior ser iniciado.

2. O script de inicialização é complicado. O processo Init apenas executa o script de inicialização. Independentemente de outras coisas, o script precisa lidar com várias situações sozinho
, o que geralmente torna o script muito longo

3. Carregado e executado pelo kernel do Linux, localizado em /sbin/init, é o primeiro processo do sistema, e o PID é sempre 1


Para programas que suportam serviço, um arquivo de configuração será adicionado automaticamente ao diretório /etc/init.d durante a instalação . Quando usamos o programa de controle de serviços, por exemplo, executamos o serviço que inicia o httpd
: service httpd start. Em seguida, nosso serviço abrirá
o arquivo executável /usr/sbin/httpd apontado no arquivo de configuração /etc/init.d/httpd


systemd

1. Inicie os serviços sob demanda para reduzir o consumo de recursos do sistema.

2. Inicie o processo em paralelo o máximo possível para reduzir o tempo de espera para a inicialização do sistema

3. Carregado e executado pelo kernel do Linx, localizado em /usr/lib/systemd/system, é o primeiro processo do sistema, e seu
PID é sempre 1


Para programas que suportam systemd, um arquivo de configuração será adicionado automaticamente ao diretório /usr/lib/systemd/system durante a instalação . Quando usamos systemctl
para controlar o programa, por exemplo, execute o serviço httpd: systemctl start httpd.service.
Então nosso systemctl abrirá
o arquivo executável /usr/sbin/httpd apontado na configuração httpd.service

Se quisermos que o programa inicie, podemos executar o comando systemctl enable
httpd, que equivale a adicionar um soft link no diretório /etc/systemd/system, apontando
para o arquivo httpd.service no diretório /usr/lib/systemd/system. Isso ocorre porque
, ao inicializar, o Systemd executa apenas os arquivos de configuração no diretório /etc/systemd/system.


Diferenças nos arquivos de configuração

O arquivo de configuração do processo Init
/etc/init.d/ O diretório de armazenamento do arquivo de configuração do script de inicialização do serviço
/etc/inittab O arquivo de configuração de nível de execução padrão
/etc/init/rcS.conf O arquivo de configuração de inicialização do sistema /etc/init/rc.conf O
arquivo de configuração para cada inicialização de nível de execução -
/etc/init/rcS-sulogin.conf O arquivo de configuração do ambiente de modo de usuário único /sbin/sushell / etc/init/control-alt-de lete.conf
O arquivo de configuração para operação de tecla de atalho ctrl+alt+del no terminal
/etc/sysconfig/init O arquivo de configuração para o terminal tty
/etc/init/start-ttys.conf Configure o número de terminais tty abertos e o arquivo de dispositivo /etc/init/tty.conf ou
etc/init/serial.conf controla a abertura do terminal tty

Arquivos de configuração para processos do Systemd

/etc/systemd/system/default.target substitui a configuração do arquivo /etc/inittab, geralmente um link simbólico para /lib/systemd/system/graphical.target
/run/systemd/system/ O diretório onde o script de serviço gerado durante a execução do sistema está localizado
/etc/systemd/system/ armazena diferentes níveis de serviços de inicialização automática / 
usr/lib/systemd/system/ e /lib/systemd/system/ e, os dois arquivos são exatamente iguais, porque lib é /usr /lib's soft link As configurações de script de inicialização mais importantes para cada serviço, semelhante ao nível e descrição /etc/init.d/run
 
 
anteriores

Nível de execução Rehl 6/7 comando Rhel7 comando
0 estado de desligamento init 0 poweroff
1 modo de resgate do sistema init 1 systemctl isolar rescue.target interface de
2 caracteres modo multiusuário (sem acesso à rede) init 2 systemctl isolar mutil-user.target interface de 3 caracteres modo multiusuário
completo init 3 systemctl isolar mutil-user.target 4 modo multiusuário não
atribuído
usando init 4 systemctl isolar mutil-user.target 5 interface gráfica init 5 (startx) systemctl isolar graphic.target
6 reiniciar o host init 6 reiniciar
Nota: caractere de corte gráfico ctrl+alt+F2(F2-F6) alternar de volta para gráfico alt + F1

Verifique o nível de execução:
runlevel: exibe o nível de execução antes de alternar e o nível de execução atual 
systemctl get-default: exibe o nível de execução atual   

Defina permanentemente o modo de inicialização:
vim /etc/inittab #centos6
systemctl set-default multi-user.target/runlevel3 Padrão de inicialização para modo texto
systemctl set-default graphic.target/runlevel5 Padrão de inicialização para modo gráfico

---------------------------------------

2. Gerenciamento de serviço do Systemd

Systemd é o mais recente sistema de inicialização (init) no sistema Linux.Seu principal objetivo de design é
superar as deficiências inerentes do sysvinit e melhorar a velocidade de inicialização do sistema. O systemd e
o upstart do ubuntu são concorrentes.A partir da versão 15.04, o Ubuntu também adotou o systemd como seu
sistema padrão de inicialização do sistema.

Há muitas coisas que precisam ser feitas para a inicialização do sistema. Precisa iniciar serviços em segundo plano, como iniciar o serviço SSHD;
precisa fazer trabalho de configuração, como montar sistemas de arquivos. Cada etapa desse processo é abstraída pelo systemd
como uma unidade de configuração, ou seja, unit. Pode-se considerar que um serviço é uma unidade de configuração, um ponto de montagem
é uma unidade de configuração, uma configuração de partição swap é uma unidade de configuração;

Unidade de serviço: serviço do sistema, o tipo mais comum
Unidade de destino: um grupo composto de várias unidades, tipo de ambiente de execução
Device Unit: dispositivo de hardware
Mount Unit: ponto de montagem do sistema de arquivos
Automount Unit: ponto de montagem automático
Path Unit: Scope Unit
: processo externo não iniciado pelo Systemd Slice Unit:
grupo de processos
Snapshot Unit: Systemd snapshot, você pode voltar para um
instantâneo Socket Unit: interprocess Communication socket service
Swap Unit: arquivo de troca
Timer Unit: serviço de execução cíclica

Rhel6 usa service e chkconfig para gerenciar serviços, que é uma ferramenta da arquitetura SystemV.

Rhel7 usa systemctl para gerenciar serviços, que combina as funções do serviço anterior e chkconfig em um.
Pode ser usado para ativar/desativar um serviço permanentemente ou apenas na sessão atual. systemctl é uma ferramenta sob a arquitetura systemd.

Ação Rhel6 antigo comando Rhel7 novo comando
Iniciar um serviço serviço rede iniciar systemctl iniciar rede
parar um serviço serviço netowrk parar systemctl parar rede
reiniciar um serviço serviço netowrk reiniciar systemctl reiniciar rede
verificar o status do serviço status do serviço netowrk status systemctl rede
excluir um serviço chkconfig --del httpd habilitar o 
serviço para iniciar automaticamente chkconfig --nível 5 httpd on systemctl habilitar httpd para que
o serviço não inicie automaticamente após a inicialização chkconfig --level 5 httpd off systemctl disable http d
Exibir todos os serviços ativados chkconfig --list systemctl list-unit-files | grep ativado
Adicionar serviços personalizados chkconfig --add test systemctl load test
Verifique se o serviço inicia automaticamente após a inicialização chkconfig --list | grep httpd systemctl is-enabled httpd
Exibir serviços que falham ao iniciar systemctl --failed

Alguns comandos comuns do systemd:
Listar todas as unidades disponíveis: systemctl list-unit-files
Listar todas as unidades em execução: systemctl list-unit-files | grep habilitado 
Listar todos os serviços disponíveis: systemctl list-unit-files --type=service Listar todos os serviços
em execução: systemctl list-unit-files --type=service | grep habilitado 
Shield serviço httpd: systemctl mask httpd
Desbloquear httpd: systemctl mask httpd ctl unmask httpd


O script service systemctl do RHEL7 é armazenado em: diretório /usr/lib/systemd/, que é dividido em system
(sistema) e user (usuário)
. Cada serviço
termina com .service e geralmente é dividido em três partes: [Unit], [Service] e [Install]. Dentro de cada parte
há alguns pares de chave-valor conectados por sinais de igual. Observe que não deve haver espaços em ambos os lados do sinal de igual dos pares de chave-valor.

vim /usr/lib/systemd/system/sshd.service 
[Unit] 
Description=OpenSSH server daemon 
Documentation=man:sshd(8) man:sshd_config(5) 
After=network.target sshd-keygen.service 
Wants=sshd-keygen.service 

[Service]
Type=notify 
EnvironmentFile=/etc/sysconfig/sshd 
ExecStart=/usr/sbin/sshd -D $OPTIONS 
ExecReload=/bin/kill -HUP $MAINPID 
KillMode=process 
Restart=on-failure 
RestartSec=42s 

[Instalar] 
WantedBy=multi-user.target

[Unit]
O bloco [Unit] é geralmente o primeiro bloco do arquivo de configuração, que é usado para definir os metadados da Unidade e
configurar o relacionamento com outras Unidades. Seus principais campos são os seguintes.
Descrição: Breve descrição
Documentação: Endereço do documento
Requer: Outras Unidades das quais a Unidade atual depende. Se não estiverem em execução, a Unidade atual falhará ao iniciar
.
Deseja: Outras Unidades que cooperem com a Unidade atual. Se não estiverem em execução, a Unidade atual não falhará ao iniciar . BindsTo: Semelhante a Requer, se a Unidade especificada por ela sair, a Unidade atual deixará de funcionar. Iniciar Conflitos antes da Unidade atual: A Unidade especificada aqui não pode ser executada ao mesmo tempo que a Unidade atual Condição...: As condições que a unidade atual deve atender, caso contrário, não executará Assert ...: As condições que a unidade atual deve atender, caso contrário, relatará falha na inicialização










[Serviço]

A parte [Serviço] é a chave do serviço, e é a configuração de alguns parâmetros operacionais específicos do serviço, somente
a Unidade do tipo Serviço possui este bloco. Seus principais campos são os seguintes.
Tipo: define o comportamento do processo na inicialização. Tem os seguintes valores.

















sempre (reinicie sempre), em caso de sucesso, em caso de falha, em caso de anormal, em caso de aborto, em estado de vigilância
TimeoutSec: Defina o número de segundos a aguardar antes que o Systemd interrompa o serviço atual
Ambiente: especifique a variável de ambiente

[install]
[Install] geralmente é o último bloco do arquivo de configuração, que é usado para definir como iniciar e se deve ser
iniciado após a inicialização. Seus principais campos são os seguintes.
WantedBy: Seu valor é um ou mais Targets. Quando a Unit atual é ativada
(enable), o link simbólico será colocado no subdiretório formado pelo
nome do Target + sufixo .wants no diretório /etc/systemd
/system. RequiredBy: Seu valor é um ou mais Targets. Quando a Unit atual for ativada, o link simbólico
será colocado no subdiretório formado pelo nome do Target + sufixo .required no diretório /etc/systemd/system Alias ​​:
Current
Unit Aliases que podem ser usados ​​para inicialização
Além disso: quando a Unidade atual é ativada (enable), outras Unidades serão ativadas ao mesmo tempo Nota: Se o serviço não tiver uma seção Instalar, geralmente significa que eles devem ser chamados automaticamente
por outros serviços


Alvo
Simplificando, Alvo é um grupo de unidades que contém muitas unidades relacionadas. Ao iniciar um
Target, o Systemd iniciará todas as Unidades nele. Nesse sentido,
o conceito de Alvo é semelhante a "ponto de estado", iniciar um Alvo é como partir para um determinado estado
.
No modo de inicialização init tradicional, existe o conceito de RunLevel, que é muito semelhante ao papel de Target.
A diferença é que os RunLevels são mutuamente exclusivos. É impossível iniciar vários RunLevels ao mesmo tempo, mas vários
Targets podem ser iniciados ao mesmo tempo.

//Visualizar todos os Targets do sistema atual 
$ systemctl list-unit-files --type=target
//Visualizar todas as Unidades contidas em um Target 
$ systemctl list-dependencies multi-user.target
//Visualizar o Target padrão na inicialização 
$ systemctl get-default
//Definir o Target padrão na inicialização 
$ systemctl set-default multi-user.target
//Ao trocar de Target, ele não é fechado por padrão o
Target
anterior que não pertence ao último Target
$ systemctl isolado multi-user.target

Acho que você gosta

Origin blog.csdn.net/weixin_63294004/article/details/130430569
Recomendado
Clasificación