📁 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.