Dodanie do cron job (bash, Python, Node)
Cel: Dodać adres Heartbeat do istniejącego zadania cron lub skryptu, aby ePulz.io otrzymywał ping "żyję" po każdym udanym uruchomieniu.
Zasada działania
Adres Heartbeat wywołujesz po pomyślnym zakończeniu zadania. Jeśli skrypt zawiedzie, adres nie zostanie wywołany, ePulz.io zauważy brakujący ping i wyśle Ci powiadomienie.
Bash / shell cron
Dodaj wywołanie curl na końcu linii cron, połączone operatorem && (uruchomi się tylko przy powodzeniu poprzedniego polecenia):
# /etc/crontab lub crontab -e
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 \
https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj > /dev/null
Znaczenie przełączników curl:
-f= zakończ błędem przy odpowiedzi błędu (curl zwraca błąd)-s= cicho (nie wypisuje postępu)-S= ale pokazuje błędy (w połączeniu z -s)-m 10= limit czasu 10 sekund> /dev/null= odpowiedź nie zaśmieca logu cron
Python
W przypadku skryptów Python dodaj wywołanie przez bibliotekę requests lub standardowe urllib:
import os
import requests
HEARTBEAT_URL = os.environ.get("HEARTBEAT_URL")
def sync_data():
# ... twoja logika ...
pass
try:
sync_data()
# Heartbeat zostanie wysłany tylko jeśli sync_data() nie zakończy się błędem
if HEARTBEAT_URL:
requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
# Heartbeat nie zostanie wysłany - ePulz.io Cię powiadomi
print(f"Sync failed: {e}")
raise
Bez zewnętrznej biblioteki, tylko ze standardową:
import urllib.request
# Po pomyślnym 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 pomyślnym zakończeniu
await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}
nightlyJob().catch(err => {
console.error(err);
process.exit(1); // Heartbeat nie zostanie wysłany, ePulz.io Cię powiadomi
});
Docker / timer systemd
Przy użyciu timera systemd dodaj do pliku .service linię ExecStartPost:
# /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 uruchomi się tylko wtedy, gdy ExecStart zakończył się pomyślnie.
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.
Test - symulacja pojedynczego uruchomienia
Przed dodaniem do cron przetestuj adres ręcznie:
$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK
Po udanym wywołaniu w przeglądzie ePulz.io zobaczysz, jak status monitora zmienia się z Oczekuje na OK.