Manifest-Referenz

Vollständige Feldreferenz für das SteadyCron v2-YAML-Manifest — Jobs, Kanäle, Regeln, Variablen, Tags und Namespaces.

Das v2-Manifest ist die maßgebliche Definition Ihres SteadyCron-Kontos. Eine einzelne Datei (oder ein Verzeichnis von Dateien) deklariert jeden Job, jeden Alert-Kanal, jedes Tag und jede Variable, die die CLI verwaltet.

Struktur auf oberster Ebene

namespace: my-app        # optional — begrenzt IaC-Eigenverantwortung
variables:               # Server-seitige Template-Variablen (Liste von Objekten)
channels:                # Alert-Kanal-Definitionen
tags:                    # Wiederverwendbare Tag-Definitionen
shaping:                 # Rate-Limit-Hinweise
jobs:                    # HTTP-Jobs und Heartbeat-Checks
                         # Alarmierungsregeln werden pro Job unter jobs[].rules deklariert

namespace

Ein String, der alle Ressourcen in diesem Manifest einem Scope zuordnet. Die CLI verwaltet (und löscht mit --prune) nur Ressourcen, die zu diesem Namespace gehören — sodass IaC-verwaltete Jobs und manuell erstellte Jobs sicher im selben Konto koexistieren können.

namespace: production

Wird namespace weggelassen, wird der Standard-Namespace verwendet. Weitere Informationen zu Multi-Umgebungs-Setups finden Sie unter Namespaces & Eigenverantwortung.

jobs[]

Jeder Eintrag ist entweder ein HTTP-Job (kind: http), der Ihren Endpunkt nach Zeitplan aufruft, oder ein Heartbeat-Check (kind: heartbeat), der einen Ping von Ihrem eigenen Cron erwartet.

Gemeinsame Felder

FeldTypErforderlichBeschreibung
idstringNeinStabiler Abstimmungsschlüssel. Bei Angabe sind Umbenennungen sicher — die id ändert sich nie, sodass Heartbeat-Ping-URLs erhalten bleiben. Fällt auf name zurück, wenn nicht angegeben.
namestringJaAnzeigename im Dashboard und in Alert-Nachrichten. Muss innerhalb des Manifests eindeutig sein.
kindhttp | heartbeatNeinJob-Typ. Standard: http.
schedulestringJa*Fünffeldriger Cron-Ausdruck (minute hour dom month dow).
intervalintegerJa*Fester Intervall in Sekunden (10–86400). Alternative zu schedule.
timezonestringNeinIANA-Zeitzonenname, z. B. Europe/Berlin. Standard: UTC.
pausedbooleanNeinJob im pausierten Zustand erstellen oder halten.
tagsstring[]NeinTag-Referenzen als "key:value"-Strings, z. B. ["env:prod", "team:backend"].
rulesobject[]NeinJob-spezifische Alarmierungsregeln. Siehe Alarmierungsregeln.

*Genau eines von schedule oder interval ist erforderlich.

HTTP-Job-Felder

FeldTypErforderlichBeschreibung
methodstringNeinHTTP-Methode. Eines von GET, POST, PUT, PATCH, DELETE. Standard: GET.
urlstringJaAufzurufender Endpunkt. Unterstützt ${ENV}- (CLI-Substitution) und {{template_var}}-Platzhalter (serverseitig).
headersobjectNeinZusätzliche Anfrage-Header. Werte unterstützen ${ENV}-Platzhalter.
bodystringNeinAnfrage-Body. Unterstützt {{template_var}}-Platzhalter.
timeoutintegerNeinAnfrage-Timeout in Sekunden. Standard: 60.
retriesintegerNeinAnzahl der Wiederholungsversuche bei Nicht-2xx-Antwort oder Timeout. Standard: 0.
retry_backoffintegerNeinSekunden zwischen Wiederholungsversuchen. Standard: 30.
retry_on_timeoutbooleanNeinTimeouts als Fehler für Wiederholungszwecke zählen. Standard: true.
retry_on_statusinteger[]NeinHTTP-Statuscodes, die einen Wiederholungsversuch auslösen (100–599).
skip_if_runningbooleanNeinAusführung überspringen, wenn der vorherige Lauf noch aktiv ist. Standard: false.
misfire_policystringNeinVerhalten bei verpasster geplanter Ausführung: do_nothing (Standard) oder fire_once_now.

Heartbeat-Check-Felder

FeldTypErforderlichBeschreibung
graceintegerNeinSekunden, die nach dem erwarteten Ping-Zeitpunkt gewartet wird, bevor ein Alert ausgelöst wird. Standard: 60.
stuck_run_detectionbooleanNeinAlarmiert, wenn ein Lauf max_run_duration überschreitet. Standard: true.
max_run_durationintegerNeinMaximale erlaubte Laufdauer in Sekunden (60–86400).

channels[]

Alert-Kanäle, die von Job-Regeln über ihre id oder ihren name referenziert werden.

FeldTypErforderlichBeschreibung
idstringNeinStabiler Referenzschlüssel, der in jobs[].rules[].channel verwendet wird.
namestringJaMenschenlesbarer Name im Dashboard und in Alert-Nachrichten.
kindstringJaEines von slack, discord, email, telegram, webhook.
configobjectNeinArt-spezifische Schlüssel-Wert-Konfiguration. Verwenden Sie ${ENV}-Platzhalter — committen Sie niemals echte Secrets.
channels:
  - id: ops-slack
    name: Slack #ops
    kind: slack
    config:
      webhook_url: ${SLACK_WEBHOOK_URL}

Alarmierungsregeln {#alert-rules}

Alarmierungsregeln werden pro Job unter jobs[].rules definiert. Jede Regel verknüpft ein Trigger-Ereignis mit einem Benachrichtigungskanal.

jobs:
  - id: weekly-digest
    name: Weekly digest email
    kind: http
    schedule: "0 9 * * 1"
    url: https://api.myapp.com/jobs/digest
    rules:
      - channel: ops-slack
        trigger: on_failure
        severity: p1
      - channel: ops-slack
        trigger: on_recovery
FeldTypErforderlichBeschreibung
channelstringJaZu benachrichtigende Kanal-id oder -name.
triggerstringJaEreignis, das die Regel auslöst: on_failure, on_recovery, on_missed_heartbeat.
severitystringNeinSchweregradlabel, das an den Kanal weitergeleitet wird (z. B. p1, p2, p3).
paramsobjectNeinTrigger-spezifische Parameter.
dedup_window_secondsintegerNeinZeitfenster zur Alert-Deduplizierung in Sekunden.

tags[]

Tags gruppieren Jobs im Dashboard. Jedes Tag hat einen key und einen value; Jobs referenzieren sie als "key:value"-Strings.

tags:
  - id: env-prod
    key: env
    value: prod
  - id: team-backend
    key: team
    value: backend

Job-Referenz: tags: ["env:prod", "team:backend"]

FeldTypErforderlichBeschreibung
idstringNeinStabiler Referenzschlüssel.
keystringJaTag-Kategorie (z. B. env, team).
valuestringJaTag-Wert (z. B. prod, backend).
colorstringNeinHexadezimaler Farbcode für das Dashboard.

variables

Server-seitige Template-Variablen. Jede Variable ist ein Objekt mit id, name und value. Die CLI löst ${ENV_VAR} in value zur Anwendungszeit auf; der Server ersetzt {{name}} in HTTP-Job-Feldern zur Ausführungszeit. Secrets landen nie in git.

variables:
  - id: digest-token
    name: digest_token
    value: ${DIGEST_TOKEN}

Verwenden Sie {{digest_token}} in HTTP-Feldern url, headers oder body.

FeldTypErforderlichBeschreibung
idstringNeinStabiler Referenzschlüssel.
namestringJaVariablenname für {{name}}-Server-seitige Substitutionen.
valuestringNeinVariablenwert. Unterstützt ${ENV_VAR}-CLI-Substitution.

shaping

Request Shaping steuert Parallelität und Rate-Limits für HTTP-Jobs — nützlich, wenn viele Jobs zur selben Minute feuern und Sie die Last verteilen möchten.

shaping:
  max_concurrent_jobs: 5
  max_jobs_per_minute: 30
FeldTypBeschreibung
max_concurrent_jobsintegerMaximale Anzahl parallel ausgeführter HTTP-Jobs.
max_jobs_per_minuteintegerMaximale HTTP-Job-Ausführungen pro Minute.

Vollständiges Beispiel

namespace: production

variables:
  - id: digest-token
    name: digest_token
    value: ${DIGEST_TOKEN}

channels:
  - id: ops-slack
    name: Slack #ops
    kind: slack
    config:
      webhook_url: ${SLACK_WEBHOOK_URL}

tags:
  - id: env-prod
    key: env
    value: prod
  - id: team-backend
    key: team
    value: backend

jobs:
  - id: weekly-digest
    name: Weekly digest email
    kind: http
    method: POST
    url: https://api.myapp.com/jobs/digest
    schedule: "0 9 * * 1"
    timezone: Europe/Berlin
    timeout: 120
    retries: 3
    tags: ["env:prod", "team:backend"]
    rules:
      - channel: ops-slack
        trigger: on_failure
        severity: p1
      - channel: ops-slack
        trigger: on_recovery

  - id: nightly-backup
    name: Nightly DB backup
    kind: heartbeat
    schedule: "0 2 * * *"
    grace: 1800
    tags: ["env:prod"]
    rules:
      - channel: ops-slack
        trigger: on_missed_heartbeat
        severity: p1

Secrets: zwei Mechanismen im Vergleich

${ENV_VAR_NAME}{{template_var}}
Aufgelöst vonCLI zur AnwendungszeitServer zur Ausführungszeit
Funktioniert inJedem FeldNur url, headers, body bei HTTP-Jobs
Verwenden fürAPI-Schlüssel, Webhook-URLs, umgebungsspezifische WerteDynamische Werte pro Ausführung
Exportiert alsPlatzhalter ${VAR}Platzhalter {{var}}

steadycron export gibt beide Arten von Platzhaltern automatisch aus, wo immer es ein Secret oder eine Template-Variable erkennt, sodass das exportierte Manifest direkt commit-sicher ist.