Skip to content

📁 Tutorial Completo de systemd

📖 Introdução

O systemd é um system and service manager para sistemas Linux modernos. Ele substitui o SysVinit tradicional e provê recursos avançados para gerenciamento de serviços, inicialização do sistema, logging, controle de dependências e gerenciamento de recursos.

🛠️ Conceitos Fundamentais

O que é o systemd?

  • Gerenciador de serviços: Controla inicialização, interrupção e supervisão de processos.
  • Gerenciador de unidades (units): Tudo no systemd é representado como uma unit.
  • Inicialização paralela: Acelera o boot executando serviços em paralelo.
  • Integração com journal: Sistema de logs centralizado (journalctl).

Tipos de Units

  • .service → Representa serviços (daemons).
  • .socket → Define sockets para ativação sob demanda.
  • .target → Agrupamento lógico de units (substitui runlevels).
  • .mount e .automount → Gerenciam pontos de montagem.
  • .timer → Tarefas agendadas (substitui cron em alguns cenários).
  • .slice e .scope → Gerenciam recursos (CPU, memória).

🚀 Comandos Essenciais

Verificar status

systemctl status nginx.service

Iniciar / Parar / Reiniciar

systemctl start nginx.service
systemctl stop nginx.service
systemctl restart nginx.service

Habilitar / Desabilitar (no boot)

systemctl enable nginx.service
systemctl disable nginx.service

Listar serviços ativos

systemctl list-units --type=service

Recarregar unidades após alterações

systemctl daemon-reload

🧩 Trabalhando com Units

Estrutura de uma Unit .service

Exemplo: /etc/systemd/system/meuapp.service

[Unit]
Description=Meu Aplicativo Exemplo
After=network.target

[Service]
ExecStart=/usr/bin/python3 /opt/meuapp/app.py
Restart=always
User=meuusuario
WorkingDirectory=/opt/meuapp

[Install]
WantedBy=multi-user.target

Explicação:

  • Description: Descrição do serviço.
  • After: Define dependências de inicialização.
  • ExecStart: Comando que inicia o processo.
  • Restart: Política de reinício (ex: always, on-failure).
  • User: Usuário que executa o processo.
  • WorkingDirectory: Diretório de trabalho.
  • WantedBy: Indica em qual target o serviço será ativado.

Ativar novo serviço

sudo systemctl daemon-reload
sudo systemctl enable meuapp.service
sudo systemctl start meuapp.service

⏱️ Timers (Agendamentos)

Exemplo de timer que roda um script diariamente:

Arquivo /etc/systemd/system/backup.service

[Unit]
Description=Backup Diário

[Service]
ExecStart=/usr/local/bin/backup.sh

Arquivo /etc/systemd/system/backup.timer

[Unit]
Description=Agendamento de Backup Diário

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Ativar:

sudo systemctl enable backup.timer
sudo systemctl start backup.timer

Ver timers ativos:

systemctl list-timers


📜 Logs e Diagnóstico

  • Ver logs de todo o sistema:

    journalctl
    

  • Ver logs de um serviço específico:

    journalctl -u nginx.service
    

  • Acompanhar em tempo real:

    journalctl -u meuapp.service -f
    


🔒 Gerenciamento de Recursos

O systemd integra-se ao cgroups do kernel Linux para controlar recursos:

Exemplo: limitar memória de um serviço (/etc/systemd/system/meuapp.service.d/limites.conf):

[Service]
MemoryMax=500M
CPUQuota=50%

Aplicar:

systemctl daemon-reexec
systemctl restart meuapp.service


🔄 Targets e Boot

Targets comuns

  • graphical.target → Interface gráfica.
  • multi-user.target → Multiusuário, sem GUI.
  • rescue.target → Modo de recuperação.
  • emergency.target → Modo de emergência.

Ver target atual:

systemctl get-default

Alterar target padrão:

systemctl set-default multi-user.target

Entrar em modo de emergência:

systemctl isolate emergency.target


🧪 Exemplos Avançados

Serviço com dependência de banco de dados

[Unit]
Description=Aplicativo Web
After=network.target mariadb.service
Requires=mariadb.service

Socket Activation

Arquivo /etc/systemd/system/meuapp.socket:

[Unit]
Description=Socket para MeuApp

[Socket]
ListenStream=8080

[Install]
WantedBy=sockets.target

Arquivo /etc/systemd/system/meuapp.service:

[Service]
ExecStart=/opt/meuapp/server --socket-activated


📚 Conclusão

O systemd é muito mais do que um simples substituto do init:
- Fornece controle detalhado sobre serviços.
- Possibilita agendamentos com timers.
- Facilita o monitoramento via journal.
- Gerencia recursos de forma integrada.

É uma ferramenta essencial para administradores de sistemas Linux modernos.