Migrer depuis crontab
Convertissez un fichier crontab en manifeste SteadyCron — associez chaque entrée à un job et gagnez des relances, des alertes et un journal d'audit.
Un crontab déclenche et oublie. Il n’y a pas de relances, pas de timeouts, pas d’alerte si le script échoue silencieusement, et aucune trace de ce qui s’est exécuté ou de ce qu’il a retourné. Ce guide associe un crontab typique à un manifeste SteadyCron et explique ce que vous y gagnez.
Un crontab typique
# /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
Le manifeste SteadyCron équivalent
namespace: myapp
channels:
- id: team-email
kind: email
email: oncall@myapp.com
jobs:
# Job HTTP : SteadyCron appelle directement l'endpoint.
# Relance en cas d'échec ; alerte via le canal si l'échec persiste.
- 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 : le script de sauvegarde envoie un ping à SteadyCron après son exécution.
# SteadyCron alerte si le ping est absent ou en retard.
- id: nightly-backup
name: Nightly DB backup
kind: heartbeat
schedule: "0 2 * * *"
grace: 1800
channel: team-email
# Heartbeat : le script de health check envoie un ping après chaque exécution.
- id: health-sweep
name: 15-minute health sweep
kind: heartbeat
schedule: "*/15 * * * *"
grace: 120
channel: team-email
Règles de correspondance
| Concept crontab | Équivalent SteadyCron |
|---|---|
| Expression de calendrier | schedule — même syntaxe cron à 5 champs |
MAILTO="" (supprimer les mails) | Supprimer le champ channel (pas d’alertes) |
Fuseau horaire via variable TZ= | Champ timezone par job |
| Script qui appelle un endpoint | Job kind: http |
| Script que vous contrôlez (s’exécute sur votre serveur) | kind: heartbeat — le script envoie un ping à SteadyCron en cas de succès |
| Redirection vers un fichier de log | SteadyCron stocke les logs complets de requête/réponse ; aucune redirection nécessaire |
2>&1 (capturer stderr) | SteadyCron capture à la fois le statut et le corps des réponses HTTP |
Job HTTP ou heartbeat : lequel choisir ?
Utilisez kind: http quand votre logique cron se trouve derrière un endpoint HTTP
que vous possédez. SteadyCron l’appelle selon le calendrier, gère les relances,
enregistre la réponse et alerte en cas d’échec. Votre entrée crontab et le script shell
deviennent inutiles — l’endpoint est le job.
Utilisez kind: heartbeat quand :
- Le script s’exécute directement sur un serveur (shell, Python, PHP, etc.)
- Vous ne pouvez pas ou ne souhaitez pas exposer un endpoint HTTP
- Le script existe déjà et vous voulez simplement le surveiller
Pour les heartbeats, ajoutez un unique appel curl vers l’URL de ping SteadyCron à
la fin de votre script :
#!/bin/bash
set -euo pipefail
# ... votre logique de sauvegarde ...
# Signaler le succès à SteadyCron
curl -fsS https://ping.steadycron.com/{your-token}
Consultez Ping depuis n’importe quel langage pour des extraits en Python, Ruby, PHP, Node.js et bien d’autres.
Ce que vous gagnez
| crontab | SteadyCron | |
|---|---|---|
| Alertes en cas d’échec | Non | Oui — email, Slack, Discord, Telegram, webhook |
| Alertes en cas d’exécution manquée | Non | Oui — avec grace period configurable |
| Relances | Non | Oui — configurables par job |
| Application du timeout | Non | Oui — par job |
| Journal d’exécution | Non (rotation des logs) | Oui — historique complet des requêtes/réponses |
| Contrôle de version | Pas aisément | Oui — le manifeste vit dans votre dépôt |
| Fuseau horaire par job | Via des contournements TZ= | Champ natif timezone |
| Révision PR pour les changements | Non | Oui — steadycron plan en CI |
Prochaines étapes
- Appliquez le manifeste :
steadycron sync manifests/myapp.yaml - Pour les jobs heartbeat : ajoutez l’URL de ping à vos scripts
- Configurez la CI pour réviser les changements : Configuration CI/CD
- Pour les jobs existants du dashboard : Migrer vers IaC