Systemd

Hello World 😁 💻

Hoje iremos falar sobre o atual e polêmico sistema de inicialização e gerenciamento de serviços (init system) do Linux, o systemd.

O que é systemd no Linux

O systemd é o gerenciador de sistema e de serviços usado pela maioria das distribuições Linux modernas. Ele é responsável principalmente por inicializar o sistema (boot) e controlar os serviços que rodam no sistema operacional. Ele é o primeiro processo importante que inicia após o kernel e gerencia praticamente tudo que roda depois.

No Linux, ele geralmente tem o PID 1, ou seja, é o primeiro processo do sistema.

Systemd no terminal.

Surgimento do systemd

Systemd foi criado em 2010 por Lennart Poettering e Kay Sievers ambos engenheiros da RedHat. A motivação principal foi resolver limitações do SysVinit, que era o padrão desde os anos 1980. Os problemas do SysVinit que motivaram a criação de um novo sistema de inicialização eram:

  • Inicialização lenta: Scripts shell executados sequencialmente (um após o outro);
  • Falta de gerenciamento de dependências: Era difícil expressar relações entre serviços;
  • Logging fragmentado: Logs espalhados em vários arquivos de texto;
  • Sem notificação de serviço pronto: Era difícil saber quando um serviço estava realmente operacional;
  • Gerenciamento de PID complexo: Rastreamento de processos era rudimentar.

Então surgiu a necessidade de criar um novo sistema de inicialização mais rápido, moderno e inteligente, que resultou no systemd.

O systemd foi lançado oficialmente em 30 de março de 2010, focado em paralelismo agressivo e no uso de cgroups do kernel para rastrear processos.

A grande polêmica

Systemd foi altamente controverso na comunidade Linux, pois os críticos argumentavam que:

  • Violava a filosofia Unix ("faça uma coisa bem feita");
  • Era monolítico demais (fazia muitas coisas);
  • Código complexo e difícil de manter;
  • Dependências circulares problemáticas;
  • Forçava adoção através de integração profunda.

Porém os defensores respondiam que:

  • Melhorava significativamente a experiência do usuário;
  • Inicialização muito mais rápida;
  • Melhor segurança e confiabilidade;
  • Necessário para sistemas modernos;
  • Logging centralizado era ótimo.

Alternativas criadas

A controvérsia foi tão grande que algumas distros criaram alternativas:

  • OpenRC: Usado por Alpine Linux, Gentoo;
  • runit: Alternativa minimalista;
  • s6: Sistema de init baseado em supervisão;
  • Devuan: Distribuição criada especificamente para evitar systemd.

Impacto na comunidade Linux

Mesmo com as críticas, systemd conseguiu:

  • Transformar a inicialização do Linux: De 30 segundos para 5-10 segundos;
  • Melhorar a experiência de desktop Linux: Integração melhor com GNOME, KDE;
  • Integração com containers: Docker, Kubernetes usam conceitos do systemd;
  • Modernização do Linux: Preparou a base para atualizações futuras.

Situação atual

Hoje, o systemd é o padrão. Quase todas as grandes infraestruturas de nuvem e servidores rodam sobre ele. Apesar das críticas à sua expansão (o projeto agora gerencia até montagem de pastas home e resolução DNS), sua eficiência em gerenciar containers e sistemas modernos é inegável.

Entendendo melhor o que systemd faz

O systemd controla várias coisas importantes como por exemplo, a inicialização e gerenciamento de serviços.

Inicialização do sistema:

Quando o Linux liga:

  • BIOS/UEFI inicia;
  • Bootloader (ex: GRUB) carrega o kernel;
  • O kernel inicia o systemd;
  • O systemd inicia todos os serviços necessários.

Exemplos de serviços:

  • rede;
  • login (SSH);
  • banco de dados;
  • servidor web;
  • interface gráfica.

Gerenciamento de serviços (daemons)

Ele controla daemons (processos que rodam em background). Exemplo:

  • nginx;
  • docker;
  • ssh;
  • mysql.

Comandos comuns:

systemctl start mysql
systemctl stop mysql
systemctl restart mysql
systemctl status mysql

O systemctl é a ferramenta que conversa com o systemd.

Exemplo Ilustrativo do Systemd

Vamos usar uma analogia com um restaurante para explicar como o systemd funciona:

Antes do systemd (SysVinit) - Restaurante Desorganizado

Imagine um restaurante onde o gerente (SysVinit) faz tudo sequencialmente:

  1. Gerente chega: 10 minutos
  2. Gerente liga as luzes: 2 minutos
  3. Gerente espera as luzes ligarem completamente: 5 minutos
  4. Gerente abre a cozinha: 3 minutos
  5. Gerente espera a cozinha estar pronta: 10 minutos
  6. Gerente abre o caixa: 2 minutos
  7. Gerente espera o caixa estar pronto: 5 minutos
  8. Gerente chama os garçons: 1 minuto
  9. Gerente espera os garçons chegarem: 10 minutos
  10. Gerente abre a porta para clientes

Total: 48 minutos para abrir.

Depois do Systemd - Restaurante Organizado

Agora imagine o gerente (systemd) sendo inteligente e dando orientações simultâneas para todos os departamentos do restaurante:

Gerente: "Vocês podem TODOS fazer isso ao mesmo tempo!"

  • Garçom 1: Liga as luzes (enquanto isso...)
  • Chefe: Abre a cozinha (enquanto isso...)
  • Caixa: Configura o sistema de pagamento (enquanto isso...)
  • Garçom 2: Prepara as mesas (enquanto isso...)

Total: 10 minutos para abrir.

Representação em tirinha da diferença do SysVinit e do systemd.

Em resumo, o systemd é um gerenciador inteligente que:

  • Inicia serviços em paralelo: inicialização mais rápida;
  • Entende dependências: sabe quem precisa de quem;
  • Monitora serviços: reinicia automaticamente se caírem;
  • Centraliza logs: fácil de debugar problemas;
  • Gerencia recursos: controla memória e CPU de cada serviço.

É como a diferença entre um restaurante onde tudo é feito por uma pessoa sequencialmente vs. um restaurante bem organizado onde vários funcionários trabalham em paralelo.

Exemplo Prático

Vamos criar um arquivo de serviço de exemplo:

sudo nano /etc/systemd/system/meu-app.service

Comando para criação do arquivo do serviço

Comando no terminal

Criação do arquivo do serviço.

Agora iremos colocar o seguinte conteúdo dentro do arquivo:

[Unit]
Description=Minha Aplicação Web
After=network.target
# ↑ Diz: "Só inicie DEPOIS que a rede estiver pronta"

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/user/app.py
Restart=always
# ↑ Diz: "Se a aplicação cair, reinicie automaticamente"

[Install]
WantedBy=multi-user.target
# ↑ Diz: "Inicie automaticamente no boot"
Conteúdo para colocar no arquivo.

Conteúdo para colocar no arquivo.

Conteúdo no arquivo.

Depois de criado, o arquivo do serviço aparece dentro da pasta /etc/systemd/system.

O serviço recém criado na pasta system do systemd.

Usando o serviço

Vamos usar alguns comandos para fazer o serviço funcionar e acompanhar o seu estado.

# Recarregar configuração
sudo systemctl daemon-reload

# Iniciar o serviço
sudo systemctl start meu-app

# Ver status
sudo systemctl status meu-app
Comandos para startar o serviço e acompanhar o seu estado.

Comandos para startar o serviço e acompanhar o seu estado.

Comandos no terminal e resultado do estado do serviço.

Para ver os logs do serviço, basta usar o seguinte comando:

journalctl -u meu-app -f

Comando para ver os logs em tempo real.

Logs do serviço.

Conclusão

O systemd revolucionou a forma como o Linux gerencia a inicialização e execução de serviços, transformando um sistema que era lento e desorganizado em uma máquina moderna e eficiente. Ele rapidamente se tornou o padrão em praticamente todas as distribuições Linux, apesar das críticas iniciais sobre sua complexidade e abrangência.

Ao permitir a execução paralela de serviços, centralizar logs, gerenciar dependências inteligentemente e monitorar processos automaticamente, systemd ofereceu melhorias tangíveis que beneficiaram tanto usuários de desktop quanto administradores de servidores.

Embora ainda existam vozes críticas que defendem alternativas mais minimalistas, a realidade é que systemd se tornou tão fundamental na infraestrutura moderna do Linux que é praticamente impossível removê-lo — para bem ou para mal, ele representou um passo necessário na evolução e modernização do sistema operacional que alimenta grande parte da internet e da computação em nuvem.

Achei super interessante conhecer e aprender sobre esse atual sistema de inicialização do Linux, assim como saber como era a realidade antes dele. É bem visível o impacto que ele causou no ecossistema Linux e o nível de performance que ele elevou o sistema operacional.

Espero que tenham gostado tanto quanto eu.

Obrigada pela atenção e até breve! 😁

Laryssa Ramos

Voltar para os artigos