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 calendrierschedule — 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 endpointJob 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 logSteadyCron 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

crontabSteadyCron
Alertes en cas d’échecNonOui — email, Slack, Discord, Telegram, webhook
Alertes en cas d’exécution manquéeNonOui — avec grace period configurable
RelancesNonOui — configurables par job
Application du timeoutNonOui — par job
Journal d’exécutionNon (rotation des logs)Oui — historique complet des requêtes/réponses
Contrôle de versionPas aisémentOui — le manifeste vit dans votre dépôt
Fuseau horaire par jobVia des contournements TZ=Champ natif timezone
Révision PR pour les changementsNonOui — steadycron plan en CI

Prochaines étapes

  1. Appliquez le manifeste : steadycron sync manifests/myapp.yaml
  2. Pour les jobs heartbeat : ajoutez l’URL de ping à vos scripts
  3. Configurez la CI pour réviser les changements : Configuration CI/CD
  4. Pour les jobs existants du dashboard : Migrer vers IaC