Додавання до cron job
Мета: Додати heartbeat URL до існуючого cron job або скрипту, щоб ePulz.io отримував "я живий" ping після кожного успішного запуску.
Принцип
Heartbeat URL викликаєте після успішного завершення завдання. Якщо скрипт не вдасться, URL не буде викликана, ePulz.io помітить відсутній ping і надішле вам сповіщення.
Bash / shell cron
Додайте виклик curl у кінець свого cron рядка, з'єднаний оператором &&:
# /etc/crontab або crontab -e
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 \
https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj > /dev/null
Прапорці curl:
-f= fail на non-2xx response (curl поверне error)-s= silent (не пише progress)-S= але покаже errors (комбінація з -s)-m 10= max-time 10 секунд (timeout)> /dev/null= response не заповнює cron log
Python
Для Python скриптів додайте виклик через requests або urllib:
import os
import requests
HEARTBEAT_URL = os.environ.get("HEARTBEAT_URL")
def sync_data():
# ... ваша логіка ...
pass
try:
sync_data()
# Heartbeat надсилається лише якщо sync_data() не raise exception
if HEARTBEAT_URL:
requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
# Heartbeat не надсилається - ePulz.io вас сповістить
print(f"Sync failed: {e}")
raise
Без зовнішньої бібліотеки, лише зі стандартною:
import urllib.request
# Після успішного завершення завдання
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 лише після успішного завершення
await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}
nightlyJob().catch(err => {
console.error(err);
process.exit(1); // Heartbeat не надсилається, ePulz.io вас сповістить
});
Docker / systemd timer
Для systemd timer, додайте ExecStartPost до .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 запускається лише якщо ExecStart був успішним.
PHP / Laravel scheduler
// app/Console/Kernel.php
$schedule->command('backup:run')
->daily()
->thenPing('https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj');
Laravel має вбудований метод thenPing() саме для цієї мети.
Розширено: ping на початку і в кінці
Для більш ретельного виявлення можете надсилати і "start" ping (завдання запустилося) - розрізните "завдання взагалі не почалося" від "завдання зависло":
# Start ping
curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj/start > /dev/null
# Ваше завдання
/usr/local/bin/backup.sh
EXIT_CODE=$?
# Done ping з exit code
curl -fsS -m 10 "https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj?exit=$EXIT_CODE" > /dev/null
Тест - симуляція одного запуску
Перед додаванням до cron протестуйте URL вручну:
$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK
Після успішного виклику в дашборді ePulz.io побачите, як стан монітора перейде з Pending на OK.