Dodanie do cron job (bash, Python, Node)
Cel: Dodać heartbeat URL do istniejącego cron job lub skryptu, aby ePulz.io otrzymywał ping "żyję" po każdym udanym przebiegu.
Zasada
Heartbeat URL wywołujesz po udanym zakończeniu zadania. Jeśli skrypt zawiedzie, URL nie zostanie wywołany, ePulz.io zauważy brakujący ping i wyśle Ci alert.
Bash / shell cron
Dodaj wywołanie curl na końcu swojego wiersza cron połączone operatorem &&:
# /etc/crontab lub crontab -e
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 \
https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj > /dev/null
Flagi curl:
-f= fail na non-2xx response (curl zwraca error)-s= silent (nie pisze progress)-S= ale pokaże errors (kombinacja z -s)-m 10= max-time 10 sekund (timeout)> /dev/null= response nie zaśmieci cron log
Python
Dla skryptów Python dodaj wywołanie przez requests lub urllib:
import os
import requests
HEARTBEAT_URL = os.environ.get("HEARTBEAT_URL")
def sync_data():
# ... twoja logika ...
pass
try:
sync_data()
# Heartbeat wyśle się tylko jeśli sync_data() nie podniesie exception
if HEARTBEAT_URL:
requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
# Heartbeat się nie wyśle - ePulz.io Cię powiadomi
print(f"Sync failed: {e}")
raise
Bez biblioteki zewnętrznej, tylko ze standardową:
import urllib.request
# Po udanym zakończeniu zadania
urllib.request.urlopen("https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj", timeout=10)
Node.js
const HEARTBEAT_URL = process.env.HEARTBEAT_URL;
async function nightlyJob() {
await processInvoices();
// Heartbeat dopiero po udanym zakończeniu
await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}
nightlyJob().catch(err => {
console.error(err);
process.exit(1); // Heartbeat się nie wyśle, ePulz.io Cię powiadomi
});
Docker / systemd timer
Dla systemd timer, dodaj ExecStartPost do pliku .service:
# /etc/systemd/system/db-backup.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
ExecStartPost=/usr/bin/curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
ExecStartPost uruchamia się tylko, jeśli ExecStart był udany.
PHP / Laravel scheduler
// app/Console/Kernel.php
$schedule->command('backup:run')
->daily()
->thenPing('https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj');
Laravel ma wbudowaną metodę thenPing() dokładnie do tego celu.
Zaawansowane: ping na początku i końcu
Dla dokładniejszej detekcji możesz wysłać też ping "start" (zadanie się uruchomiło) - rozróżnisz przez to "zadanie w ogóle nie zaczęło" od "zadanie się zacięło":
# Start ping
curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj/start > /dev/null
# Twoje zadanie
/usr/local/bin/backup.sh
EXIT_CODE=$?
# Done ping z exit code
curl -fsS -m 10 "https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj?exit=$EXIT_CODE" > /dev/null
Test - symulacja jednego przebiegu
Przed dodaniem do cron przetestuj URL ręcznie:
$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK
Po udanym wywołaniu w dashboardzie ePulz.io zobaczysz stan monitora przechodzący z Pending na OK.