Systemd - Como ele inicia seu sistema

Systemd - Como ele inicia seu sistema
Systemd foi desenvolvido quando os desenvolvedores descobriram que iniciar o sistema em paralelo não era possível. Os sistemas mais antigos passam por seus arquivos de inicialização do sistema um por um. Isso pode fazer com que a bota pare quando aguarda recursos lentos. Um exemplo disso é quando um processo precisa ter a rede em execução. Usando a rede é muito lento, outros recursos não devem ter que esperar. Esse problema pode ser mitigado de outras maneiras, mas com o Systemd, toda a startup é feita em paralelo sempre que possível. O resultado deve ser uma startup muito mais rápida para sistemas complexos, que inclui seu sistema de desktop.

Systemd: Pai de todos os outros processos

Um sistema Linux e qualquer outro sistema *, sempre inicia um processo que é o pai de todos os outros processos. Quando você usa o Systemd, esse processo é SystemD, o processo é sempre chamado de 'init', independentemente do sistema init. Depois que o Systemd estiver em execução, ele iniciará os daemons que executam os subsistemas. Os daemons controlam quais recursos você tem e quais sistemas estão abertos. Seu prompt de login é um serviço gerenciado pelo Systemd. Systemd inicia muitos outros serviços e também monta todos os seus discos, incluindo as montagens de snap.

Como você controla o que começa?

Primeiro de tudo, o primeiro sistema init teve níveis que muitos leitores reconhecerão. O Runlevel 1 era o modo de usuário único, 2 modo multiusuário sem rede e 3-5 multiusuário e gráfico. Definir o nível de execução para 0 significava parar e 6 significava reiniciar. Os desenvolvedores do Systemd descobriram que esses níveis não são claros, então mudaram para serem chamados de alvos. Os alvos não são exatamente os mesmos, mas têm uma função semelhante. Quando um alvo específico está em execução, uma coleção específica de unidades está em execução. Mais sobre unidades mais tarde.

Definindo o "Runlevel", chamado de alvo.

Você pode alterar o alvo enquanto estiver em execução, por exemplo, você pode usar um terminal para definir seu alvo como multiusuador. Isso impediria sua GUI, X ou Wayland, mas deixaria você e outros, faça login com um console de texto. Use o seguinte comando.

$ systemctl isolate multiuser.alvo

Ou, se você quiser iniciar sua área de trabalho, use o seguinte comando.

$ systemctl isolado gráfico.alvo

O que você realmente está interessado é como iniciar o nível correto, você pode descobrir o que tem agora.

$ Systemctl Get-Default

Para alterar o padrão, defina -o.

$ Systemctl Set-Default Graphical.alvo

Este comando realmente faz muitas unidades e serviços começarem enquanto você inicializa seu computador. Você pode querer iniciar ou parar um único serviço.

Iniciar, parar, habilitar e desativar um serviço.

É aqui que você tem a chance de mudar o que acontece na inicialização e durante a operação normal. Em contraste com os alvos, as unidades são especiais para um serviço específico. Para interromper um serviço que você usa 'SystemCtl Stop', igualmente você pode usar 'start' e 'reiniciar'. Para fazer um serviço começar na inicialização, você usa 'Ativar', para impedi -lo de 'desativar'. Escolha um serviço e comece e pare enquanto estiver funcionando.

$ systemctl status cops.serviço

Este comando mostra o status do serviço, também mostra uma lista de ações tomadas pelo sistema sobre o serviço. Para parar o serviço, use o comando abaixo.

$ Systemctl Stop Cups.serviço

O serviço agora está parado para sua sessão atual. Para alterá -lo para não começar no próximo uso de inicialização.

$ systemctl desativando xícaras.serviço

Observe que você só poderia desativar o serviço, isso não teria efeito em sua situação atual. O serviço continua correndo. Na próxima bota, porém, não iniciará o serviço.

Systemd também controla montagens, dispositivos, soquetes e muito mais. As unidades estão mais baixas e mais fáceis de entender, se você já lidou com um Linux antes. Você também pode defini -las, mas o maior efeito na inicialização é controlar os serviços.

Como você adiciona seus próprios scripts?

Você pode adicionar seus próprios scripts com bastante facilidade, os detalhes interessantes de saber é como você faz seu script ou serviço para depender dos outros. Isso é claramente demonstrado neste arquivo de serviço de resumo do wifi.

[Unidade]
Descrição = Reiniciar o NetworkManager no currículo
Depois = suspender.alvo
Depois = Hibernate.alvo
Depois = sono híbrido.alvo
[Serviço]
Tipo = OneShot
ExecStart =/bin/systemctl reiniciar-se-gerente de rede.serviço
[Instalar]
Wantedby = suspender.alvo
WantedBy = Hibernate.alvo
WantedBy = Sleep híbrido.alvo

Este código cria um serviço que acontece uma vez (OneShot) depois que os três alvos mencionados no código. O código executado é neste caso um único comando. Você também pode apontar para um script de sua escolha.

Conclusão

Alterando seu sistema, especialmente como ele inicializa, você pode fazer você mesmo, mas tenha cuidado que isso tem muitas consequências para cada serviço, portanto, verifique se seu código é estável e rápido de executar.