Chaque moniteur de tâche cron a sa propre URL de ping, affichée sur sa page. Remplacez https://app.uptimecheck.com/api/hb/your-token ci-dessous par la vôtre. Pour créer le moniteur, voyez comment surveiller une tâche cron.
Les URL
…/your-token : la tâche s’est exécutée et a réussi.…/your-token/start : la tâche a démarré. Vous voyez les durées d’exécution, et une exécution qui dépasse le Maximum run time déclenche une alerte.…/your-token/fail : la tâche a échoué. Vous êtes alerté immédiatement au lieu d’attendre l’échéance.…/your-token/0 à /255 : le code de sortie. 0 signifie succès, toute autre valeur un échec.
GET, POST et HEAD fonctionnent tous, et la réponse est OK. Le corps d’un POST est conservé comme sortie de la tâche et affiché avec les échecs et dans l’alerte. Nous lisons jusqu’à 64 ko et gardons le début et la fin, 10 000 caractères au total. Un corps plus volumineux est refusé et le ping est perdu : envoyez donc la fin du journal, comme ci-dessous. Le jeton dans l’URL fait office de secret : ne le laissez pas apparaître dans des journaux publics.
Un script d’encapsulation pour tout planificateur
Ce script exécute une commande, signale son démarrage, son code de sortie et les 60 derniers ko de sortie, puis transmet le code de sortie. Enregistrez-le sous /usr/local/bin/with-ping et exécutez chmod +x dessus.
#!/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
Donnez au moniteur la même planification et le Time zone dans lequel tourne la crontab, souvent UTC.
Planificateur Laravel
Laravel envoie lui-même les pings. Dans routes/console.php (Laravel 11 et versions ultérieures ; avant cela, les mêmes méthodes sur $schedule dans 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 »);
Un échec est une commande qui se termine avec un code de sortie non nul. La planification suit le fuseau horaire de l’application, sauf si vous ajoutez ->timezone() ; indiquez le même sur le moniteur.
Kubernetes CronJob
Stockez l’URL de ping comme secret avec kubectl create secret generic uptimecheck –from-literal=ping-url=https://app.uptimecheck.com/api/hb/your-token. L’image doit contenir 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
Si le pod ne démarre jamais, par exemple parce que l’image ne peut pas être récupérée, aucun ping n’arrive et le moniteur déclenche une alerte à l’échéance. timeZone nécessite Kubernetes 1.27 ou une version ultérieure.
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 »
Enregistrez l’URL de ping comme secret du dépôt UPTIMECHECK_PING_URL. Donnez au moniteur le fuseau horaire du workflow, UTC par défaut. GitHub peut lancer les exécutions planifiées en retard lorsqu’il est surchargé : prévoyez donc un Grace period généreux, par exemple 30 minutes.
Timer systemd
# /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
Activez-le avec sudo systemctl daemon-reload et sudo systemctl enable –now backup.timer. OnCalendar suit le fuseau horaire du serveur.
Planificateur de tâches Windows
# 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
Enregistrez-le pour qu’il s’exécute chaque nuit à 03:00, dans PowerShell en tant qu’administrateur :
$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
Le Planificateur de tâches utilise le fuseau horaire de l’ordinateur ; indiquez le même sur le moniteur. En savoir plus sur les expressions cron et la surveillance des tâches cron.