Zum Inhalt springen
use-cases / on-call-shift-cron / hero
CRON · EXPIRES_AT · NOTIFICATIONS

Eine On-Call-Eskalation, die mit deiner Schicht abläuft

Poste am Montag einen Cron-Eintrag mit expires_at auf Freitag 09:00. Der Job pinged dein Telefon vier Tage lang alle 30 Minuten und löscht sich dann in dem Moment, in dem die Schicht endet. Der nächste On-Call postet seinen. Kein PagerDuty-Schedule, keine geteilte Scheduler-Config, keine Kalendererinnerung zum Deaktivieren.

Cron-Docs lesen
use-cases / on-call-shift-cron / handoff

Wie die Schicht ohne Meeting übergibt

Drei Punkte in der Woche. Die Existenz des Cron-Eintrags spiegelt die Schicht exakt wider — kein Overlap, keine Lücke, keine übrig gebliebene crontab-Zeile.

Montag 09:00 → Freitag 09:01expires_at trägt die Schicht
MONTAG 09:00

Eintrag posten

Ein curl mit Schedule */30, command auf hoody-notifications/push/me, und expires_at = Freitag 09:00:00Z. Server gibt id e7d3 zurück.

MO–FR

Pings reiten dein Telefon

Vier Tage lang, alle 30 Minuten, läuft der Eintrag und pinged hoody-notifications. Nur dein Gerät. Der Team-Channel bleibt ruhig.

FREITAG 09:01

Eintrag entfernt sich selbst

Um 09:00:00Z löscht der Cron-Service e7d3. Der 09:30-Tick hat nichts zu feuern. Der nächste On-Call hat seinen schon gepostet.

Jeder On-Call schreibt einen POST, wenn seine Schicht beginnt. Das expires_at-Feld ist das gesamte Übergabeprotokoll — der Cron-Service erledigt das Aufräumen, auf die Sekunde genau.

use-cases / on-call-shift-cron / mechanism

Zwei curls — einer pro Schicht

Das ganze Rotationsprotokoll sind zwei HTTP-Calls pro Woche. Der On-Call postet am Montag, listet am Freitag, sieht, dass der Eintrag schon weg ist. Es gibt keine geteilte Schedule-Datei, in die man mergt.

monday.sh · m.dossantos
POST · entry
# monday 09:00 — i'm on call until friday 09:00
curl -X POST \
  https://oncall.containers.hoody.com/users/me/entries \
  -H "Content-Type: application/json" \
  -d '["schedule":"*/30 * * * *","command":"curl -fsS hoody-notifications/push/m.dossantos","comment":"on-call wk19","expires_at":"2026-05-08T09:00:00Z"]'

# response
HTTP/1.1 201 Created
{ "id":"e7d3", "expires_at":"2026-05-08T09:00:00Z", "enabled":true }
friday.sh · m.dossantos
GET · audit
# friday 09:01 — the next on-call took over
curl GET https://oncall.containers.hoody.com/users/me/entries

HTTP/1.1 200 OK
[
  // my entry e7d3 is gone — it expired
  // at 09:00 sharp. j.okafor's new
  // entry took over at 09:00:30.
]
# no slack thread, no calendar reminder

Kein geteilter Scheduler-Service ist beteiligt. Der Cron-Eintrag gehört dem Engineer; nichts am Setup des nächsten On-Calls hängt davon ab, dass der vorige aufgeräumt hat.

use-cases / on-call-shift-cron / powers

Drei Dinge, die diese Form aus deiner Woche entfernt

Ein On-Call-Eintrag, dem seine eigene Lebenszeit gehört, stoppt drei Klassen von Fehlern, die PagerDuty-Configs und Kalendererinnerungen nicht stoppen können.

ROUTING

Pings reiten ein Gerät — deins

Weil das command des Eintrags auf deinen persönlichen Notify-Endpoint zeigt, gehen Eskalationen für die Dauer deiner Schicht an dein Telefon, und nur das. Kein versehentlicher Team-Channel-Spam um 3 Uhr nachts.

OWNERSHIP

Keine geteilte Config zu editieren, kein PR zu mergen

Es gibt keine escalation_policy.yaml, die jeder anfasst. Jeder Engineer besitzt seinen Eintrag. Zwei On-Calls in verschiedenen Zeitzonen können nicht durch das Editieren derselben Datei in Konflikt geraten.

AUFRÄUMEN

Die Übergabe steckt in den Daten, nicht im Chat

Wenn am Freitag 09:00 die Schicht wechselt, fragst du nicht „Moment, krieg ich die noch?" Der Eintrag ist schon weg. Die Übergabe zu verifizieren ist ein GET, der eine Zeile weniger zurückgibt.

use-cases / on-call-shift-cron / capacity

Was der Cron-Service garantiert

Zahlen kommen aus der Hoody Cron API. Echte Limits, keine erfundenen.

  1. EXPIRY-PRÄZISION1 Sek.

    Auto-Expiration läuft gegen die Systemuhr. Ein 09:00:00Z expires_at löscht innerhalb derselben Minute, in der der Cron-Tick feuert — kein 5-Minuten-Janitor-Lag.

  2. FELDER PRO SCHEDULE5

    Standard-5-Feld-Cron-Ausdrücke plus @hourly / @daily / @weekly Makros. */30 * * * * ist es, was während deiner Schicht alle 30 Minuten feuert.

  3. ISOLATION1 / User

    Jeder System-User hat seine eigene crontab. Der Eintrag des nächsten On-Calls lebt unter seinem eigenen /users/[name]/entries — nie deiner.

Limits laut Hoody Cron API: verwaltete Einträge sind JSON-CRUD mit UUIDs und expires_at; Raw-crontab-Zugriff pro User verfügbar; Per-User-crontab-Isolation ist eingebaut.

use-cases / on-call-shift-cron / punchline

Wenn die Schicht endet, endet auch der Cron-Eintrag — automatisch.

vorher · die Rotationsdateinachher · zwei curls pro Woche
WIE DIE ALTE ÜBERGABE AUSSAHoncall.yaml editieren → PR → mergen → jemanden anpingen, damit er deaktiviertvier Menschen · eine geteilte Datei · trotzdem um 11 Uhr Freitag gepingt worden
WIE ES JETZT AUSSIEHTPOST /entries [ expires_at: '2026-05-08T09:00:00Z' ]ein Engineer · ein curl · der Cron-Service erledigt das Aufräumen
Cron-Docs lesen
use-cases / on-call-shift-cron / replaces

Was das ersetzt

Die Standardtools, zu denen du greifst, wenn du On-Call-Rotationen willst. Jedes berechnet dir einen Service, ein Config-Repo und ein Übergaberitual. Ein Cron-Eintrag mit expires_at berechnet dir einen POST.

  • PagerDuty-EskalationsrichtlinienPro-Sitz-Pricing für das, was ein curl auf dein Telefon ist
  • Opsgenie-Schedule-RotationenEin ganzes Produkt, um herauszufinden, wer diese Woche gepingt wird
  • Custom-On-Call-Config-ReposGeteiltes YAML, das jeder per PR ändert und niemandem gehört
  • daran denken, Cron bei der Übergabe zu deaktivierenEine Kalendererinnerung, die du setzt, ignorierst und am Freitag verschickst
  • manuelles Eskalations-AufräumenSlack-Thread um 11 Uhr Freitag — „hey, kann mich jemand abmelden"
  • VictorOps-RotationenNoch ein Scheduler-Service für das, was ein expires_at-Feld erledigt
use-cases / on-call-shift-cron / cta

Hör auf, am Freitagmorgen crontab-Zeilen zu deaktivieren. Setz expires_at am Montag und vergiss es.

Cron-Docs lesen
use-cases / on-call-shift-cron / related

Lies die anderen