Migrar desde crontab
Convierta un archivo crontab en un manifiesto de SteadyCron — asigne cada entrada a un job y obtenga reintentos, alertas y un log de auditoría.
Un crontab dispara y olvida. No hay reintentos, ni timeouts, ni alertas si el script falla silenciosamente, y ningún registro de qué se ejecutó o qué devolvió. Esta guía asigna un crontab típico a un manifiesto de SteadyCron y explica qué se gana con ello.
Un crontab típico
# /etc/cron.d/myapp
MAILTO=""
# Weekly digest — every Monday at 09:00 Berlin time
0 9 * * 1 www-data /var/www/myapp/bin/send-digest.sh
# Nightly DB backup — every day at 02:00
0 2 * * * www-data /var/www/myapp/bin/backup.sh >> /var/log/backup.log 2>&1
# 15-minute health sweep
*/15 * * * * www-data /var/www/myapp/bin/health-check.sh
El manifiesto equivalente de SteadyCron
namespace: myapp
channels:
- id: team-email
kind: email
email: oncall@myapp.com
jobs:
# Job HTTP: SteadyCron llama directamente al endpoint.
# Reintenta en caso de fallo; alerta por el canal si sigue fallando.
- id: weekly-digest
name: Weekly digest email
kind: http
method: POST
url: https://api.myapp.com/jobs/send-digest
schedule: "0 9 * * 1"
timezone: Europe/Berlin
timeout: 120
retries: 3
channel: team-email
# Heartbeat: el script de backup hace ping a SteadyCron al completarse.
# SteadyCron alerta si el ping no llega o llega tarde.
- id: nightly-backup
name: Nightly DB backup
kind: heartbeat
schedule: "0 2 * * *"
grace: 1800
channel: team-email
# Heartbeat: el script de health check hace ping tras cada ejecución.
- id: health-sweep
name: 15-minute health sweep
kind: heartbeat
schedule: "*/15 * * * *"
grace: 120
channel: team-email
Reglas de asignación
| Concepto de crontab | Equivalente en SteadyCron |
|---|---|
| Expresión de calendario | schedule — misma sintaxis cron de 5 campos |
MAILTO="" (suprimir correo) | Eliminar el campo channel (sin alertas) |
Zona horaria mediante variable TZ= | Campo timezone por job |
| Script que llama a un endpoint | Job kind: http |
| Script que usted controla (se ejecuta en su servidor) | kind: heartbeat — el script hace ping a SteadyCron al tener éxito |
| Redirección a archivo de log | SteadyCron almacena logs completos de solicitud/respuesta; no es necesaria la redirección |
2>&1 (capturar stderr) | SteadyCron captura tanto el estado como el cuerpo de las respuestas HTTP |
Job HTTP vs heartbeat: ¿cuál usar?
Use kind: http cuando su lógica de cron está detrás de un endpoint HTTP que
usted controla. SteadyCron lo llama según el calendario, gestiona los reintentos,
registra la respuesta y alerta ante fallos. Su entrada de crontab y el script de shell
dejan de ser necesarios — el endpoint es el job.
Use kind: heartbeat cuando:
- El script se ejecuta directamente en un servidor (shell, Python, PHP, etc.)
- No puede o no quiere exponer un endpoint HTTP
- El script ya existe y solo quiere monitorizarlo
Para los heartbeats, añada una única llamada curl a la URL de ping de SteadyCron al
final de su script:
#!/bin/bash
set -euo pipefail
# ... su lógica de backup ...
# Señalar éxito a SteadyCron
curl -fsS https://ping.steadycron.com/{your-token}
Consulte Ping desde cualquier lenguaje para snippets en Python, Ruby, PHP, Node.js y más.
Qué se gana
| crontab | SteadyCron | |
|---|---|---|
| Alertas ante fallos | No | Sí — email, Slack, Discord, Telegram, webhook |
| Alertas ante ejecución perdida | No | Sí — con grace period configurable |
| Reintentos | No | Sí — configurables por job |
| Timeout forzado | No | Sí — por job |
| Log de ejecución | No (rotación de logs) | Sí — historial completo de solicitud/respuesta |
| Control de versiones | No fácilmente | Sí — el manifiesto vive en su repositorio |
| Zona horaria por job | Con trucos de TZ= | Campo nativo timezone |
| Revisión de PR para cambios | No | Sí — steadycron plan en CI |
Importación automatizada
En lugar de escribir el manifiesto manualmente, use steadycron import crontab para
generarlo automáticamente desde un archivo crontab existente:
# Desde un archivo
steadycron import crontab /etc/cron.d/myjobs -o steadycron.yaml
# Desde crontab -l (jobs del usuario actual)
crontab -l | steadycron import crontab -o steadycron.yaml
# Vista previa sin escribir
steadycron import crontab mycron.txt --dry-run
El importador asigna cada entrada a un tipo de job automáticamente:
| Tipo de comando | Se convierte en |
|---|---|
URL curl/wget/https://… directa | Job http — URL, método y headers extraídos |
| Cualquier otra cosa | Monitor heartbeat |
Use --as http o --as heartbeat para forzar todas las entradas a un tipo específico.
Convenciones de crontab manejadas: las líneas de asignación de entorno MAILTO= y PATH=
se ignoran; un # comentario directamente encima de una entrada se convierte en el name del
job; las macros @daily, @weekly, @monthly se expanden a expresiones cron de 5 campos; el
formato de crontab de sistema (6.º campo es un nombre de usuario) se detecta automáticamente o
se fuerza con --system.
Tras la importación, revise el manifiesto y sincronice:
steadycron validate steadycron.yaml
steadycron sync steadycron.yaml --namespace prod
Próximos pasos
- Aplique el manifiesto:
steadycron sync manifests/myapp.yaml - Para jobs de heartbeat: añada la URL de ping a sus scripts
- Configure CI para revisar cambios: Configuración CI/CD
- Para jobs existentes del dashboard: Migrar a IaC