Hver cron-jobb-monitor har sin egen ping-URL, som vises på siden til monitoren. Bytt ut https://app.uptimecheck.com/api/hb/your-token nedenfor med din egen. For å opprette monitoren, se hvordan du overvåker en cron-jobb.
URL-ene
…/your-token: jobben kjørte og lyktes.…/your-token/start: jobben startet. Du ser kjøretider, og en kjøring som går over Maximum run time, utløser et varsel.…/your-token/fail: jobben feilet. Du varsles med en gang i stedet for ved fristen.…/your-token/0 til /255: avslutningskoden. 0 betyr suksess, alt annet en feil.
GET, POST og HEAD fungerer alle, og svaret er OK. En POST-body lagres som jobbens utdata og vises sammen med feil og i varselet. Vi leser opptil 64 kB og beholder første og siste del, 10 000 tegn til sammen. En større body avvises og pingen går tapt, så send slutten av loggen, som nedenfor. Tokenet i URL-en er hemmeligheten, så hold det unna offentlige logger.
Et skript som fungerer med alle planleggere
Dette skriptet kjører en kommando, rapporterer starten, avslutningskoden og de siste 60 kB med utdata, og sender avslutningskoden videre. Lagre det som /usr/local/bin/with-ping og kjør chmod +x på det.
#!/bin/sh
# with-ping URL COMMAND…: runs COMMAND and reports it to Uptimecheck
url=»$1″; shift
curl -fsS -m 10 –retry 3 -o /dev/null «$url/start»
log=$(mktemp)
«$@» > «$log» 2>&1
code=$?
tail -c 60000 «$log» | curl -fsS -m 10 –retry 3 –data-binary @- -o /dev/null «$url/$code»
rm -f «$log»
exit $code
crontab
# Ping when the job succeeds
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 –retry 3 -o /dev/null https://app.uptimecheck.com/api/hb/your-token
# Or report start, exit code and output with the script above
0 3 * * * /usr/local/bin/with-ping https://app.uptimecheck.com/api/hb/your-token /usr/local/bin/backup.sh
Gi monitoren den samme tidsplanen og den Time zone crontab kjører i, ofte UTC.
Laravel scheduler
Laravel pinger URL-er selv. I routes/console.php (Laravel 11 og nyere; før det de samme metodene på $schedule i app/Console/Kernel.php):
use Illuminate\Support\Facades\Schedule;
Schedule::command(«backup:run»)
->dailyAt(«03:00»)
->pingBefore(«https://app.uptimecheck.com/api/hb/your-token/start»)
->pingOnSuccess(«https://app.uptimecheck.com/api/hb/your-token»)
->pingOnFailure(«https://app.uptimecheck.com/api/hb/your-token/fail»);
En feil er en kommando som avsluttes med en annen avslutningskode enn null. Tidsplanen følger appens tidssone med mindre du legger til ->timezone(); still inn det samme på monitoren.
Kubernetes CronJob
Lagre ping-URL-en som en secret med kubectl create secret generic uptimecheck –from-literal=ping-url=https://app.uptimecheck.com/api/hb/your-token. Imaget trenger curl.
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-backup
spec:
schedule: «0 3 * * *»
timeZone: «Europe/Stockholm»
concurrencyPolicy: Forbid
jobTemplate:
spec:
backoffLimit: 0
template:
spec:
restartPolicy: Never
containers:
– name: backup
image: registry.example.com/backup:1.4
env:
– name: PING_URL
valueFrom:
secretKeyRef:
name: uptimecheck
key: ping-url
command: [«/bin/sh», «-c»]
args:
– |
curl -fsS -m 10 –retry 3 -o /dev/null «$PING_URL/start»
/app/backup.sh > /tmp/out.log 2>&1
code=$?
tail -c 60000 /tmp/out.log | curl -fsS -m 10 –retry 3 –data-binary @- -o /dev/null «$PING_URL/$code»
exit $code
Hvis poden aldri starter, for eksempel fordi imaget ikke kan hentes, kommer det ingen ping, og monitoren varsler ved fristen. timeZone krever Kubernetes 1.27 eller nyere.
GitHub Actions
on:
schedule:
– cron: «0 3 * * *»
jobs:
nightly:
runs-on: ubuntu-latest
env:
PING_URL: ${{ secrets.UPTIMECHECK_PING_URL }}
steps:
– uses: actions/checkout@v4
– run: curl -fsS -m 10 –retry 3 -o /dev/null «$PING_URL/start» || true
– run: ./scripts/nightly.sh
– if: success()
run: curl -fsS -m 10 –retry 3 -o /dev/null «$PING_URL»
– if: failure()
run: curl -fsS -m 10 –retry 3 -o /dev/null «$PING_URL/fail»
Lagre ping-URL-en som repository-secreten UPTIMECHECK_PING_URL. Gi monitoren tidssonen til workflowen, som er UTC som standard. GitHub kan starte planlagte kjøringer for sent når det er travelt, så sett en romslig Grace period, for eksempel 30 minutter.
systemd-timer
# /etc/systemd/system/backup.service
[Unit]
Description=Nightly backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/with-ping https://app.uptimecheck.com/api/hb/your-token /usr/local/bin/backup.sh
# /etc/systemd/system/backup.timer
[Unit]
Description=Run the nightly backup
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
Slå den på med sudo systemctl daemon-reload og sudo systemctl enable –now backup.timer. OnCalendar følger serverens tidssone.
Windows Oppgaveplanlegging
# C:\Scripts\backup-with-ping.ps1
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$ping = «https://app.uptimecheck.com/api/hb/your-token»
try { Invoke-RestMethod -Uri «$ping/start» -TimeoutSec 10 | Out-Null } catch {}
$output = & «C:\Scripts\backup.cmd» 2>&1 | Out-String
$code = $LASTEXITCODE
if ($output.Length -gt 30000) { $output = $output.Substring($output.Length – 30000) }
Invoke-RestMethod -Uri «$ping/$code» -Method Post -Body $output -TimeoutSec 10 | Out-Null
exit $code
Registrer den til å kjøre hver natt kl. 03:00, i PowerShell som administrator:
$action = New-ScheduledTaskAction -Execute «powershell.exe» -Argument «-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\backup-with-ping.ps1»
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -TaskName «Nightly backup» -Action $action -Trigger $trigger -User «SYSTEM» -RunLevel Highest
Oppgaveplanlegging bruker datamaskinens tidssone; still inn det samme på monitoren. Les mer om cron-uttrykk og overvåking av cron-jobber.