Додавання до 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.