kb.erickguedes.com
Linux Avançado: Administração e Performance

Systemd em Profundidade

Aula 2 de 7

Unit Files

Systemd gerencia serviços através de unit files. Cada serviço, socket, timer ou montagem é uma unit.

# Localização das units
ls /usr/lib/systemd/system/      # units fornecidas por pacotes
ls /etc/systemd/system/           # units personalizadas (sobrescreve)

Criando um Serviço Systemd

sudo tee /etc/systemd/system/meu-app.service << EOF
[Unit]
Description=Meu Serviço Personalizado
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=meuuser
WorkingDirectory=/opt/meu-app
ExecStart=/usr/bin/python3 /opt/meu-app/app.py
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now meu-app

Tipos de Service

TypeComportamento
simpleProcesso principal (não faz fork)
forkingProcesso faz fork (daemon tradicional)
oneshotExecuta e termina (usado com RemainAfterExit=yes)
notifyNotifica via sd_notify()
dbusEspera registro no D-Bus

Timers — Substituindo Cron

sudo tee /etc/systemd/system/backup.timer << EOF
[Unit]
Description=Backup diário às 2h

[Timer]
OnCalendar=daily
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=1800

[Install]
WantedBy=timers.target
EOF

sudo tee /etc/systemd/system/backup.service << EOF
[Unit]
Description=Script de backup

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

sudo systemctl enable --now backup.timer
systemctl list-timers

Journald — Gestão de Logs

# Configuração: /etc/systemd/journald.conf
journalctl -u nginx                     # logs de um serviço
journalctl --since "1 hour ago"
journalctl --until "2024-01-01"
journalctl -p err                       # apenas erros
journalctl -f                           # seguir em tempo real
journalctl --disk-usage                 # tamanho no disco
journalctl --vacuum-size=500M           # limpar até 500MB
journalctl -o json-pretty               # saída JSON

Cgroups e Resource Control

# Limitar recursos de um serviço
sudo mkdir -p /etc/systemd/system/meu-app.service.d/
sudo tee /etc/systemd/system/meu-app.service.d/limits.conf << EOF
[Service]
MemoryMax=500M
CPUQuota=50%
IOWeight=100
TasksMax=50
EOF

sudo systemctl daemon-reload
systemctl show meu-app -p MemoryMax

Systemd é o padrão no Linux moderno. Entender unit files, timers e journald é essencial para administração profissional.