Добавление в 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
После успешного вызова в dashboard ePulz.io вы увидите, как состояние монитора переходит из Pending на OK.