Guía9 min

schedule (cron) en GitHub Actions: UTC, no cada minuto

Resumen

on.schedule usa cron de 5 campos en UTC. GitHub puede saltar runs y desactiva el schedule tras ~60 días sin commits. Un agente que pone * * * * * quema minutos. Distinct de workflow_dispatch. Docs GitHub scheduled events.

GitHub
Un cron en UTC cada 6h, no cada minuto

Qué resuelve

Esta pieza se queda en la decisión práctica: qué instalar, qué riesgo agrega y cómo aplicarlo sin romper operación.

on.schedule no es el botón Run. Es un cron UTC. 0 9 * * * son las 09:00 UTC, no las 9 de Guatemala (−6).

GitHub documenta que los schedules pueden retrasarse y que un repo inactivo deja de dispararlos. No es un SLA.

No sustituye workflow_dispatch (a demanda). El curso instalar un agente no cubre cron. gh pr no programa jobs.

Receta

on:
  schedule:
    - cron: "0 */6 * * *"
  workflow_dispatch: {}

Pon también workflow_dispatch para probar sin esperar 6 h.

Mínimo razonable: cada hora o más. */5 * * * * en un job de 8 min se pisa. Combina con concurrency si hace falta.

UTC no es hora de Guatemala

Qué no hacer

  • * * * * *. GitHub lo limita; igual es abuso.
  • Cron “a las 21 GT” escrito como 0 21 * * * (eso es 21 UTC).
  • Un schedule que deploys a prod sin Environment.

Si el workflow está en una rama que no es default, el schedule no corre (solo default branch).

Receta AGENTS.md

schedule cron is UTC. Never * * * * *.
Always add workflow_dispatch next to schedule for manual test.
Default-branch only. Do not schedule production deploys without Environment.

Default branch + dispatch de prueba

FAQ

¿60 días? GitHub desactiva schedules en repos sin actividad. Un push reactiva.

¿Varios crons? Lista bajo schedule:. No copies el workflow.

¿TZ en el job? TZ=America/Guatemala date en el step, el trigger sigue UTC.

Verificado 2026-09-03 contra GitHub Docs events schedule (cron UTC, default branch, delays).