Aus jeder Sprache pingen
Copy-Paste-Snippets, um eine SteadyCron-Heartbeat-URL bei Erfolg und Fehler anzupingen — Bash, Python, Node.js, PHP, Ruby, Go, PowerShell, Docker und systemd.
Ein Heartbeat-Check ist einfach eine URL, die Sie anfragen, wenn Ihr Job läuft.
Kopieren Sie ein Snippet unten, ersetzen Sie <ihr-ping-token>, und Sie sind
überwacht. Bei Erfolg pingen Sie die Basis-URL an; bei Fehler /fail; optional
zuerst /start, damit hängende Läufe erkannt werden.
Ihre Ping-URL sieht aus wie
https://ping.steadycron.com/<ihr-ping-token>— Sie finden sie auf der Seite des Checks, nachdem Sie einen Heartbeat angelegt haben.
curl (Einzeiler)
curl -fsS -m 10 --retry 3 https://ping.steadycron.com/<ihr-ping-token>
-f schlägt bei HTTP-Fehlern fehl, -s ist still, -m 10 begrenzt die Zeit,
--retry 3 übersteht einen kurzen Netzwerk-Aussetzer.
Bash (start / success / fail)
#!/usr/bin/env bash
set -euo pipefail
TOKEN=<ihr-ping-token>
PING="https://ping.steadycron.com/$TOKEN"
curl -fsS -m 10 "$PING/start" # Job gestartet
if ./run-job.sh; then
curl -fsS -m 10 "$PING" # Erfolg
else
curl -fsS -m 10 "$PING/fail" # expliziter Fehler
fi
Beliebigen Befehl umschließen
Pingt automatisch /fail, wenn der Befehl mit einem Code ungleich null endet — ohne
Änderungen am Job selbst:
TOKEN=<ihr-ping-token>
PING="https://ping.steadycron.com/$TOKEN"
./run-job.sh && curl -fsS "$PING" || curl -fsS "$PING/fail"
Python
import subprocess
import urllib.request
TOKEN = "<ihr-ping-token>"
PING = f"https://ping.steadycron.com/{TOKEN}"
def ping(suffix=""):
try:
urllib.request.urlopen(PING + suffix, timeout=10)
except Exception:
pass # Monitoring darf den Job nie kaputtmachen
ping("/start")
try:
subprocess.run(["./run-job.sh"], check=True)
ping() # Erfolg
except subprocess.CalledProcessError:
ping("/fail") # Fehler
Node.js
const TOKEN = "<ihr-ping-token>";
const PING = `https://ping.steadycron.com/${TOKEN}`;
const ping = (suffix = "") =>
fetch(PING + suffix, { signal: AbortSignal.timeout(10_000) }).catch(() => {});
await ping("/start");
try {
await runJob();
await ping(); // Erfolg
} catch {
await ping("/fail"); // Fehler
}
PHP
<?php
$token = "<ihr-ping-token>";
$ping = "https://ping.steadycron.com/$token";
function ping(string $url): void {
@file_get_contents($url, false, stream_context_create([
"http" => ["timeout" => 10, "ignore_errors" => true],
]));
}
ping("$ping/start");
$exit = 0;
system("./run-job.sh", $exit);
ping($exit === 0 ? $ping : "$ping/fail");
Ruby
require "net/http"
token = "<ihr-ping-token>"
ping = "https://ping.steadycron.com/#{token}"
def hit(url) = Net::HTTP.get_response(URI(url)) rescue nil
hit("#{ping}/start")
if system("./run-job.sh")
hit(ping) # Erfolg
else
hit("#{ping}/fail")
end
Go
package main
import (
"net/http"
"os/exec"
"time"
)
const ping = "https://ping.steadycron.com/<ihr-ping-token>"
func hit(suffix string) {
c := &http.Client{Timeout: 10 * time.Second}
if resp, err := c.Get(ping + suffix); err == nil {
resp.Body.Close()
}
}
func main() {
hit("/start")
if err := exec.Command("./run-job.sh").Run(); err == nil {
hit("") // Erfolg
} else {
hit("/fail")
}
}
PowerShell (Windows / Aufgabenplanung)
$token = "<ihr-ping-token>"
$ping = "https://ping.steadycron.com/$token"
function Ping($url) { try { Invoke-WebRequest -UseBasicParsing -TimeoutSec 10 $url | Out-Null } catch {} }
Ping "$ping/start"
& ".\run-job.ps1"
if ($LASTEXITCODE -eq 0) { Ping $ping } else { Ping "$ping/fail" }
Docker-Healthcheck
HEALTHCHECK --interval=5m --timeout=10s \
CMD curl -fsS https://ping.steadycron.com/<ihr-ping-token> || exit 1
systemd-Timer
Fügen Sie der Service-Unit, die Ihr Timer ausführt, ein ExecStartPost /
ExecStopPost hinzu:
[Service]
Type=oneshot
ExecStart=/usr/local/bin/run-job.sh
ExecStartPost=/usr/bin/curl -fsS https://ping.steadycron.com/<ihr-ping-token>
Nächste Schritte
- Heartbeat-Monitoring — Kulanzzeiten und Erkennung hängender Läufe.
- Alerting — werden Sie bei einem verpassten Ping benachrichtigt.