Pular para conteúdo

Launchd — Crons locais no Mac do Junior

Última revisão: 2026-04-21

Scripts em /Users/juniormaia/gita/scripts/cron/ agendados via Launchd no macOS.

Diretriz de longo prazo: migrar para o Easypanel (apiclickup) sempre que possível. Manter local só o que precisa do filesystem do Mac (commits git, por exemplo).


Agents ativos

plist Script Schedule O que faz Candidato a migrar?
com.juniormaia.eod-git-save eod-git-save.sh Seg–sex 20h WIP auto-commit no repo gita (salva progresso do dia) Não — precisa do filesystem local
com.juniormaia.hauly-weekly hauly-weekly-report.sh Seg 10h Relatório semanal Hauly (PDF) + envia no WhatsApp Sim, migrar pra apiclickup
com.juniormaia.health-ping health-ping.sh Cada 30min Ping em /health do apiclickup, alerta se fora Sim, migrar (ou usar monitor externo tipo UptimeRobot)
com.juniormaia.morning-briefing morning-briefing.sh Seg–sex 8h Briefing matinal (git + server + métricas) Sim, migrar pra apiclickup
com.juniormaia.weekly-digest weekly-digest.sh Seg 9h Digest semanal Sim, migrar

Scripts órfãos (sem plist — não rodam)

Existem mas ninguém chama:

  • send-daily-report.sh — redundante com o cron scheduled-reports do apiclickup. Manter deletável.
  • daily-metrics.sh — gera markdown das métricas do dia. Era input do briefing matinal.

Decisão: deletar quando a migração do morning-briefing pro apiclickup estiver feita.


Comandos operacionais

# Listar agents da Gita rodando
launchctl list | grep juniormaia

# Pausar um agent (até próximo login)
launchctl unload ~/Library/LaunchAgents/com.juniormaia.<nome>.plist

# Reativar
launchctl load ~/Library/LaunchAgents/com.juniormaia.<nome>.plist

# Forçar execução agora
launchctl start com.juniormaia.<nome>

# Ver logs do agent
tail -f ~/gita/server/logs/launchd-<nome>.log
tail -f ~/gita/server/logs/launchd-<nome>-error.log

Health-ping — fix aplicado em 21/04/2026

Sintoma

health-ping.sh retornava HTTP 000 a cada 30min porque caía no default https://localhost:3000/health (ninguém estava atendendo naquela porta no Mac).

Fix

  1. Script agora falha com erro explícito se GITA_HEALTH_URL não estiver configurada.
  2. Configurar a URL no plist (persiste entre reboots), não só no shell do Junior.

Passo-a-passo

Editar ~/Library/LaunchAgents/com.juniormaia.health-ping.plist e adicionar dentro do bloco <dict> (antes do </plist>):

<key>EnvironmentVariables</key>
<dict>
    <key>PATH</key>
    <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    <key>HOME</key>
    <string>/Users/juniormaia</string>
    <key>GITA_HEALTH_URL</key>
    <string>https://apiclickup.gita.work/health</string>
</dict>

Confirmar a URL real do apiclickup no Easypanel antes de gravar. Pode ser gita.work, grupogita.com.br ou outro domínio do tenant.

Depois:

launchctl unload ~/Library/LaunchAgents/com.juniormaia.health-ping.plist
launchctl load ~/Library/LaunchAgents/com.juniormaia.health-ping.plist
# Testar já
bash ~/gita/scripts/cron/health-ping.sh && echo "OK"

Diagnóstico rápido

# Testar a URL manualmente
curl -v "$GITA_HEALTH_URL"

# Ver últimos 50 pings
tail -50 ~/gita/server/logs/cron.log | grep "Health Ping"