Solución de problemas de automatización

Usa esta página para problemas del programador y la entrega (cron + heartbeat).

Escalera de comandos

openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe

Luego ejecuta las verificaciones de automatización:

openclaw cron status
openclaw cron list
openclaw system heartbeat last

Cron no se dispara

openclaw cron status
openclaw cron list
openclaw cron runs --id <jobId> --limit 20
openclaw logs --follow

Una buena salida se ve así:

  • cron status reporta habilitado y un nextWakeAtMs futuro.
  • La tarea está habilitada y tiene un horario/zona horaria válidos.
  • cron runs muestra ok o una razón de omisión explícita.

Firmas comunes:

  • cron: scheduler disabled; jobs will not run automatically → cron deshabilitado en config/env.
  • cron: timer tick failed → el tick del programador falló; inspecciona la pila/contexto del log.
  • reason: not-due en la salida de ejecución → ejecución manual llamada sin --force y la tarea aún no es debida.

Cron se disparó pero no hubo entrega

openclaw cron runs --id <jobId> --limit 20
openclaw cron list
openclaw channels status --probe
openclaw logs --follow

Una buena salida se ve así:

  • El estado de la ejecución es ok.
  • El modo/destino de entrega están configurados para tareas aisladas.
  • La sonda del canal reporta el canal destino conectado.

Firmas comunes:

  • La ejecución tuvo éxito pero el modo de entrega es none → no se espera mensaje externo.
  • Destino de entrega faltante/inválido (channel/to) → la ejecución puede tener éxito internamente pero omite la salida.
  • Errores de auth del canal (unauthorized, missing_scope, Forbidden) → la entrega está bloqueada por credenciales/permisos del canal.

Heartbeat suprimido u omitido

openclaw system heartbeat last
openclaw logs --follow
openclaw config get agents.defaults.heartbeat
openclaw channels status --probe

Una buena salida se ve así:

  • Heartbeat habilitado con intervalo no nulo.
  • El último resultado del heartbeat es ran (o la razón de omisión se entiende).

Firmas comunes:

  • heartbeat skipped con reason=quiet-hours → fuera de activeHours.
  • requests-in-flight → la vía principal está ocupada; heartbeat diferido.
  • empty-heartbeat-file → heartbeat por intervalo omitido porque HEARTBEAT.md no tiene contenido procesable y no hay evento cron etiquetado en cola.
  • alerts-disabled → la configuración de visibilidad suprime mensajes de heartbeat salientes.

Problemas con zona horaria y activeHours

openclaw config get agents.defaults.heartbeat.activeHours
openclaw config get agents.defaults.heartbeat.activeHours.timezone
openclaw config get agents.defaults.userTimezone || echo "agents.defaults.userTimezone not set"
openclaw cron list
openclaw logs --follow

Reglas rápidas:

  • Config path not found: agents.defaults.userTimezone significa que la clave no está configurada; el heartbeat recurre a la zona horaria del host (o activeHours.timezone si está configurada).
  • Cron sin --tz usa la zona horaria del host del gateway.
  • activeHours del heartbeat usa la resolución de zona horaria configurada (user, local o una IANA tz explícita).
  • Las marcas de tiempo ISO sin zona horaria se tratan como UTC para los horarios at de cron.

Firmas comunes:

  • Las tareas se ejecutan a la hora de reloj incorrecta después de cambios de zona horaria del host.
  • El heartbeat siempre se omite durante tu horario diurno porque activeHours.timezone es incorrecto.

Relacionado: