Planificación · Ejecución
Tus endpoints, llamados
según el plan.
Llamamos a tu endpoint según el plan; tú te centras en el handler. Un constructor de peticiones real — no solo un campo de URL — con reintentos, control de timeout y un registro de ejecución completo para cada run.
Plan gratuito — sin tarjeta de crédito.
Sin SteadyCron
# /etc/cron.d/invoices
0 9 * * 1-5 deploy /app/send_invoices.sh
# Exit code: unknown.
# Retries: none.
# Logs: rotated.
# Did it run? Check manually. Con SteadyCron
✓ recuperado tras 1 reintento — alertado en el fallo, resuelto en la recuperación
El problema
El cron del sistema es una mentira que has aceptado
Dispara y olvida. Sin reintentos. Sin timeouts. Sin registro de auditoría. Sin alertas cuando el script falla, supera el tiempo límite o deja de ejecutarse del todo.
Fallos silenciosos
Tu cron se dispara, tu script falla, nadie se entera. El backup de DB que lleva seis semanas sin ejecutarse. El informe que está vacío desde el deploy.
exit 1 # ← zero alerts Sin reintentos ni timeouts
Un fallo de red transitorio falla el job permanentemente. O un job se queda colgado indefinidamente, ocupando un slot de cron mientras la memoria del servidor sube.
SIGKILL? never heard of it Sintaxis cron horrible
Cada equipo tiene un README con una leyenda para explicar qué significa 0 4 * * 1. Luego alguien lo edita mal y el job se ejecuta cada minuto a las 4 AM.
0 4 * * 1 # ??? Sin registro de auditoría
"¿Ejecutó el job de facturas el martes pasado?" Compruebas los logs. No hay logs. cron.log fue rotado hace seis días.
grep -i invoice /var/log/cron.log Cómo funciona
Defínelo una vez. Funciona siempre.
Sin ningún daemon cron que vigilar. Sin rotación de logs de la que preocuparse. SteadyCron gestiona la ejecución — de principio a fin.
Definir el job
Configura la URL, el método, las cabeceras, el cuerpo, el horario y la zona horaria en dos minutos. Añade reintentos, un timeout y variables de plantilla. O decláralo como código y aplícalo desde CI.
POST /v1/invoices/send 0 9 * * 1-5 Europe/Berlin Enviamos la petición
A la hora programada, SteadyCron envía la petición HTTP con tus cabeceras y cuerpo exactos. El cambio de hora se gestiona correctamente. Si el código de respuesta activa un reintento, lo hacemos con backoff exponencial.
POST → 200 OK 312ms attempt 1/1 Inspeccionar cada ejecución
Cada run se registra: estado de respuesta, cuerpo, cabeceras, duración y número de intento. Un run que falló y se recuperó en un reintento tiene un aspecto diferente al que agotó todos los intentos.
→ success attempt 2/3 847ms total Constructor de peticiones
Un constructor de peticiones real,
no solo un campo de URL
Empieza con un nombre, una URL y un horario. Elige expresión cron o intervalo — una vista previa en directo de los próximos runs te muestra los tiempos de ejecución exactos antes de guardar, sin sorpresas a las 3 AM.
Elige cualquier método HTTP. Añade cabeceras de petición — Authorization, Content-Type, o lo que necesite tu endpoint. Adjunta un cuerpo JSON para jobs POST y PUT, con resaltado de sintaxis en directo y validación que detecta payloads malformados antes de que se envíen.
Para los casos avanzados: introduce variables {{template}} en cualquier lugar de la URL, las cabeceras o el cuerpo. Se resuelven en el servidor en el momento de la ejecución y nunca se almacenan en tus scripts — útil para tokens de API, IDs de cuenta, o cualquier valor que varía entre entornos. La programación por zona horaria a nivel de job significa que "días laborables a las 09:00 Berlin" se ejecuta a las 09:00 en Berlín, incluso en los cambios de hora.
Request
Configure the HTTP request sent on each execution. Use
{{variable}}
for template substitution.
Headers
{
"account_id": "{{accountId}}",
"amount_cents": 4900,
"send_email": true
} ✓ Valid JSON
Schedule
When it runs — cron or interval, with DST-correct timezones and a live next-runs preview.
Cron expression
Weekdays at 09:00
Timezone
Next runs
Lo que registramos
Cuatro posibles resultados de una ejecución
Cada resultado es distinto, registrado y visible en el dashboard con su propio color y etiqueta.
Éxito
El endpoint devolvió una respuesta 2xx dentro del timeout configurado. Ejecución completada, respuesta completa registrada.
Fallo
El endpoint devolvió un estado no-2xx en todos los intentos, o la conexión falló. Cada intento es una entrada de registro separada.
Timeout
El endpoint no respondió dentro del timeout por job. La petición se cancela limpiamente — sin conexiones zombie.
Omitido
El run anterior aún estaba en progreso cuando este disparo era debido. El guard de solapamiento evitó una ejecución concurrente.
Fiabilidad
Diseñado para jobs que no deben fallar en silencio
Los controles que de otro modo implementarías manualmente alrededor del cron del sistema son aquí configuración de primer nivel.
Reintentos con backoff exponencial
Configura hasta 5 reintentos con backoff exponencial. Elige exactamente qué códigos de estado HTTP activan un reintento — para que un 404 siga siendo un fallo definitivo pero un 503 tenga otra oportunidad.
retry_on: [429, 503, 502]
max_retries: 3 backoff: 30s Control de timeout por job
Si tu endpoint se bloquea — consulta DB lenta, API upstream degradada — SteadyCron cancela la petición tras el timeout configurado. Sin conexiones zombie, sin fugas de recursos silenciosas.
timeout_seconds: 30
# error_kind: request_timeout Guard de solapamiento
Si el run anterior no ha terminado cuando el próximo disparo es debido, omitimos el nuevo run en lugar de apilar peticiones concurrentes contra tu endpoint. Evita fallos en cascada en jobs lentos.
skip_if_still_running: true
# status: skipped Registro de auditoría
Cada run, registrado por completo
Estado de respuesta, cuerpo, cabeceras, duración y número de intento — almacenados para cada ejecución. Nunca más preguntar "¿ejecutó el job de facturas el martes pasado?" y obtener un encogimiento de hombros.
Los runs fallidos que se recuperaron en un reintento tienen un aspecto diferente a los que agotaron todos los intentos. Cada intento es su propia entrada de registro con su propio timing y código de estado, para que puedas ver exactamente dónde salieron mal las cosas.
invoice-send · registro de ejecución
Una plataforma, tres trabajos
Ejecución HTTP
Estás aquíLlama a tus endpoints según el horario — reintentos, tiempos de espera y logs completos.
Monitorización heartbeat
Vigila los jobs que ejecutas donde sea; recibe alerta en cuanto uno se silencia.
Cron as code
Define cada job, monitor y alerta en YAML o Terraform.
Deja de preguntarte si tu job se ejecutó.
Define el job una vez. Nosotros gestionamos la ejecución, los reintentos, los timeouts y el registro de auditoría. Tú gestionas el handler.
- Plan gratuito — sin tarjeta de crédito
- Alojado en la UE, RGPD nativo
- 5 HTTP jobs en el plan gratuito