Noções Essenciais de Sysadmin
Arquivos, permissões, processos e serviços em servidores Linux executando APIs Python, workers e jobs cron - os comandos que os operadores usam antes de abrir um depurador Python.
Receita
ls -la /var/log/myapp/
sudo systemctl status billing-api
sudo journalctl -u billing-api -n 100 --no-pager
df -h && du -sh /var/lib/myapp/*Quando usar isso:
- SSH em staging/prod para verificar o deploy
- Erros de permissão negada em diretórios de log ou upload
- Alertas de disco cheio bloqueando escritas
- Serviço falhou ao iniciar após alteração de configuração
Exemplo de Trabalho
# Novo diretório de deploy pertencente ao usuário do serviço
sudo mkdir -p /var/lib/billing-api/uploads
sudo chown billing:billing /var/lib/billing-api/uploads
sudo chmod 750 /var/lib/billing-api/uploads
# Verifica a unidade e os logs recentes
sudo systemctl daemon-reload
sudo systemctl restart billing-api
sudo systemctl is-active billing-api
sudo journalctl -u billing-api -fO que isso demonstra:
- Propriedade de diretório de menor privilégio para o usuário do aplicativo
- Ciclo de vida do
systemctlapós alteração do arquivo de unidade - Modo de rastreamento
-fno journal para triagem ao vivo - Verificação de disco antes da rotação de log grande
Mergulho Profundo
Como Funciona
- Usuários/grupos - O processo é executado como usuário do serviço; os arquivos precisam de propriedade correspondente.
- systemd - Arquivos de unidade definem
ExecStart, env, política de reinício. - journald - Log centralizado para serviços systemd.
- Sistema de Arquivos - Inodes e blocos podem se esgotar independentemente.
Mapa de Comandos
| Problema | Comandos |
|---|---|
| Permissões | ls -la, namei -l path, chmod, chown |
| Disco | df -h, du -xh --max-depth=1 |
| Serviço | systemctl status, restart, enable |
| Logs | journalctl -u, tail /var/log/ |
Notas Python
# Encontra qual processo está ocupando a porta 8000
sudo ss -tlnp | grep 8000
# Confirma o caminho do python do venv na unidade systemd
systemctl cat billing-api | grep ExecStartArmadilhas
- Executar o aplicativo como root - Desastre de segurança. Correção: usuário dedicado, capacidades apenas se portas baixas forem necessárias (prefira proxy reverso).
- chmod 777 uploads - Diretório de dados gravável por qualquer pessoa. Correção:
750e grupo do aplicativo. - Editar produção sem backup - Arquivo de unidade corrompido para o serviço. Correção: copie a unidade para
/etc/systemd/system/com comentário de versão. - Ignorar esgotamento de inode -
dfmostra espaço, mas as escritas falham. Correção:df -i. - Preenchimento de disco de log - O aplicativo falha na escrita. Correção: limites de tamanho de logrotate + journal.
- Negações SELinux/AppArmor - A permissão parece correta, mas ainda EPERM. Correção:
ausearch/aa-status.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Logs do Docker | Serviços Python em contêineres | VMs systemd bare metal |
| Kubernetes kubectl | Deploys K8s | Staging de VM única |
| Playbooks Ansible | Configuração de servidor repetível | Debug SSH pontual |
| Gerenciador de sessão SSH na nuvem | Sem chaves SSH de bastião | On-premise air-gapped |
FAQs
systemd ou supervisord?
systemd em VMs Linux modernas; supervisord em contêineres legados sem systemd.
Onde colocar .env no servidor?
/etc/billing-api/env modo 600 pertencente a root:billing com EnvironmentFile= na unidade - não legível por qualquer pessoa.
Reiniciar vs recarregar?
recarregar se o aplicativo suportar HUP; APIs Python geralmente precisam de reiniciar após o deploy de código.
Verificar umask para uploads?
A unidade de serviço pode definir UMask=0027 para que novos arquivos não sejam graváveis pelo grupo/qualquer pessoa.
tmpfs para uploads em /tmp?
tmpfs dimensionado evita o preenchimento do disco, mas os dados são perdidos na reinicialização - use apenas para scratch efêmero.
Desvio de relógio NTP?
timedatectl status - JWT e correlação de log quebram com relógio ruim.
ulimit de arquivos abertos?
Aumente LimitNOFILE= na unidade para FastAPI de alta conexão atrás de keep-alive.
Encontrar binários setuid?
Auditoria de segurança find / -perm -4000 2>/dev/null - não relacionado a Python, mas tarefa comum de sysadmin.
Uploads compartilhados NFS?
O mapeamento UID/GID deve corresponder entre os nós - prefira armazenamento de objetos (S3) para uploads.
Sistema de arquivos raiz somente leitura?
Monte caminhos graváveis explicitamente para logs e tmp - comum em contêineres protegidos.
Relacionados
- Gerenciamento de Processos e Recursos - sinais e limites
- SSH e Trabalho Remoto - padrões de acesso
- Implantando FastAPI - layout de produção
- Scripts Robustos - automação defensiva
Versões de Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.