Добавление в cron job
Цель: Добавить адрес Heartbeat в существующую задачу cron или скрипт, чтобы ePulz.io получал пинг "я жив" после каждого успешного запуска.
Принцип работы
Адрес Heartbeat вызывается после успешного завершения задачи. Если скрипт завершится с ошибкой, адрес не будет вызван, ePulz.io заметит отсутствующий пинг и отправит вам уведомление.
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= завершиться с ошибкой при ответе об ошибке (curl возвращает ошибку)-s= тихо (не выводит ход выполнения)-S= но показывает ошибки (в сочетании с -s)-m 10= ограничение по времени 10 секунд> /dev/null= ответ не переполняет журнал cron
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() не завершилась с ошибкой
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
При использовании таймера systemd добавьте в файл .service строку 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 выполняется только тогда, когда ExecStart завершился успешно.
Планировщик PHP / Laravel
// app/Console/Kernel.php
$schedule->command('backup:run')
->daily()
->thenPing('https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj');
В Laravel есть встроенный метод thenPing() именно для этой цели.
Тест - имитация одного запуска
Перед добавлением в cron протестируйте адрес вручную:
$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK
После успешного вызова в обзоре ePulz.io вы увидите, как статус монитора изменится с Ожидание на OK.