fix(convex): mover cron jobs para API HTTP + crontab do Linux
Problema: - Cron jobs do Convex criam registros em _scheduled_job_logs - Convex self-hosted carrega TODAS as versoes em memoria - 1488 execucoes/dia = ~45k registros/mes acumulando - Uso de memoria chegando a 19GB, causando 12 OOM kills/dia Solucao: - Criar endpoints HTTP em /api/cron/* para substituir crons - Desabilitar crons no Convex (comentados em crons.ts) - Chamar endpoints via crontab do Linux Novos arquivos: - src/app/api/cron/chat-cleanup/route.ts - src/app/api/cron/usb-cleanup/route.ts - scripts-static/* (copiado da VPS para versionamento) Documentacao: - docs/OPERATIONS.md secao 12 com instrucoes do crontab 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
e2dde8510a
commit
178c7d7341
10 changed files with 1357 additions and 19 deletions
|
|
@ -103,13 +103,22 @@ npx convex dev --once --configure=new
|
|||
|
||||
Depois disso, o job “Deploy Convex functions” funciona em modo não interativo.
|
||||
|
||||
## 5) VPS — Acesso e Serviços
|
||||
## 5) VPS — Acesso e Servicos
|
||||
|
||||
- Acesso
|
||||
- Host: `31.220.78.20`
|
||||
- Usuário: `root`
|
||||
- Chave SSH (repo raiz): `./codex_ed25519` (Atenção: manter permissões 600)
|
||||
- Exemplo: `ssh -i ./codex_ed25519 root@31.220.78.20`
|
||||
- Host: `154.12.253.40`
|
||||
- Usuario: `root`
|
||||
- Chave SSH (repo raiz): `./codex_ed25519` (Atencao: manter permissoes 600)
|
||||
- Exemplo (Git Bash/Linux):
|
||||
```bash
|
||||
# Preparar chave (copiar e ajustar permissoes)
|
||||
cp "./codex_ed25519" ~/.ssh/codex_ed25519
|
||||
sed -i 's/\r$//' ~/.ssh/codex_ed25519
|
||||
chmod 600 ~/.ssh/codex_ed25519
|
||||
|
||||
# Conectar
|
||||
ssh -i ~/.ssh/codex_ed25519 root@154.12.253.40
|
||||
```
|
||||
- Opcional (endurecimento): desabilitar login por senha após validar a chave.
|
||||
|
||||
- Diretórios principais
|
||||
|
|
@ -393,3 +402,58 @@ ssh root@154.12.253.40 "docker service logs sistema_convex_backend 2>&1 | grep -
|
|||
- Este e um bug interno do Convex self-hosted que pode ser corrigido em versoes futuras
|
||||
- A solucao de adicionar logs obrigatorios e um workaround que nao afeta performance
|
||||
- Se novos cron jobs forem adicionados, **sempre incluir um console.log no inicio**
|
||||
|
||||
## 12) Cron Jobs — Movidos para Linux crontab
|
||||
|
||||
### Problema
|
||||
|
||||
Os cron jobs do Convex criam registros em `_scheduled_job_logs` que acumulam versoes em memoria. O Convex self-hosted carrega **todas as versoes de todos os documentos** em RAM, causando uso excessivo de memoria (~19GB para 60k docs).
|
||||
|
||||
### Solucao Implementada (2025-12-10)
|
||||
|
||||
Os cron jobs foram movidos do Convex para endpoints HTTP no Next.js, chamados via crontab do Linux:
|
||||
|
||||
| Cron Job Original | Endpoint HTTP | Frequencia |
|
||||
|-------------------|---------------|------------|
|
||||
| `auto-end-inactive-chat-sessions` | `/api/cron/chat-cleanup` | A cada 1 min |
|
||||
| `cleanup-stale-usb-policies` | `/api/cron/usb-cleanup` | A cada 30 min |
|
||||
|
||||
### Configuracao do Crontab na VPS
|
||||
|
||||
```bash
|
||||
# Acessar a VPS
|
||||
ssh -i ~/.ssh/codex_ed25519 root@154.12.253.40
|
||||
|
||||
# Editar crontab
|
||||
crontab -e
|
||||
|
||||
# Adicionar as linhas:
|
||||
CRON_SECRET="seu_token_secreto_aqui"
|
||||
|
||||
# Encerrar sessoes de chat inativas (a cada minuto)
|
||||
* * * * * curl -s "https://tickets.esdrasrenan.com.br/api/cron/chat-cleanup" -H "x-cron-secret: $CRON_SECRET" >/dev/null 2>&1
|
||||
|
||||
# Limpar policies USB pendentes (a cada 30 min)
|
||||
*/30 * * * * curl -s "https://tickets.esdrasrenan.com.br/api/cron/usb-cleanup" -H "x-cron-secret: $CRON_SECRET" >/dev/null 2>&1
|
||||
```
|
||||
|
||||
### Autenticacao
|
||||
|
||||
Os endpoints usam o header `x-cron-secret` para autenticacao. O valor deve ser igual a variavel de ambiente `CRON_SECRET` ou `REPORTS_CRON_SECRET` configurada no Next.js.
|
||||
|
||||
### Verificar se esta funcionando
|
||||
|
||||
```bash
|
||||
# Testar endpoint manualmente
|
||||
curl -s "https://tickets.esdrasrenan.com.br/api/cron/chat-cleanup" \
|
||||
-H "x-cron-secret: SEU_TOKEN" | jq
|
||||
|
||||
# Verificar logs do cron
|
||||
grep CRON /var/log/syslog | tail -20
|
||||
```
|
||||
|
||||
### Codigo-fonte
|
||||
|
||||
- `src/app/api/cron/chat-cleanup/route.ts`
|
||||
- `src/app/api/cron/usb-cleanup/route.ts`
|
||||
- `convex/crons.ts` (crons originais comentados)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue