Переходите з UptimeRobot? Імпортуйте монітори одним кліком за ключем API лише для читання.Почати безкоштовно →
  1. Головна
  2. Моніторинг
  3. Моніторинг cron-завдань

Cron моніторинг: дізнайтеся, коли завдання не виконалось

Кожен heartbeat-монітор має свою URL-адресу для пінга. Завдання викликає її після завершення, і якщо наступний пінг не надходить упродовж періоду плюс запас часу, відкривається інцидент.

  • Від $7 на місяць на Starter
  • Тариф Free: 30 моніторів для HTTP(S), ключових слів, ping і портів
  • Free без банківської картки
nightly-backupОчікуємо щогодини · запас 5 хв
вчасно

пінг отримано 2 хв тому

Останній пінг
2 хв тому
Час останнього запуску
14 хв
Наступний пінг через
58 хв
Запас часу
5 хв

Ілюстративний приклад

Спробуйте

Перевірте просто зараз, прямо в браузері

Без реєстрації. Моніторинг cron-завдань: введіть адресу й подивіться, що саме відстежує такий монітор. Нічого з введеного не зберігається.

Замініть hb_YOUR_TOKEN на токен створеного монітора. Завдяки && невдалий скрипт не надсилає пінг, а -fsS мовчить, доки curl не збоїть.

Результат з’явиться тут.

Створити такий монітор

Що перевіряє

Що саме перевіряє цей монітор

Пропущений пінг

Ви задаєте, як часто завдання має пінгувати, і запас часу в секундах. Немає пінга до цього моменту — відкривається інцидент.

Пінг про збій

Виклик /fail одразу позначає завдання як невдале й зберігає ваше повідомлення або код виходу як причину.

Пінг про початок

Виклик /start фіксує, що запуск розпочався. Він з’являється в історії монітора, але дедлайн визначають пінги про завершення.

Вивід завдання

Тіло POST-запиту (або ?msg=) до 10 КБ зберігається разом із пінгом, тож останні рядки логу потрапляють в інцидент.

Сповіщення

Моніторинг cron-завдань: як виглядає сповіщення

Та сама подія приходить листом, повідомленням у Telegram або карткою в Slack. Це текст, який надсилають канали; хост, час і числа вигадані.

Кому [email protected]

Тема [MISSED] nightly-backup — Heartbeat missed, last ping 26 h ago

MISSED

nightly-backup

nightly-backup · Heartbeat missed, last ping 26 h ago

ErrorHeartbeat missed, last ping 26 h ago
Since14:02:11 UTC
Target/hb/hb_••••••••
Next stepThe job did not ping on time. Check the cron/task runner and its logs.

AcknowledgeOpen incident

Tenium · checked from Amsterdam · 14:02 UTC

Tenium alerts

🔴 MISSED · nightly-backup · Heartbeat missed, last ping 26 h ago

TTenium APP 2:02 PM

MISSED · nightly-backup
nightly-backup · Heartbeat missed, last ping 26 h ago

  • Error: Heartbeat missed, last ping 26 h ago
  • Target: /hb/hb_••••••••

Підтвердити отриманняOpen incident

The job did not ping on time. Check the cron/task runner and its logs. · checked from Amsterdam

Моніторинг cron-завдань: e-mail, Discord і Google Chat працюють на всіх тарифах, Slack, Telegram, Teams і Mattermost — з тарифу Starter. SMS і голосових дзвінків немає.

Тривалість завдання

Скільки зазвичай триває нічне завдання

Heartbeat із /start і фінальним пінгом дає ще й тривалість кожного запуску, тож завдання, що раптом тривають утричі довше, помітно одразу.

Час виконання Поріг ілюстративні дані
Скільки зазвичай триває нічне завдання. Ілюстративні дані. 012.52537.550 Поріг 40 хв 00:0006:0012:0018:0024:00 Час виконання (хв)
Heartbeat із /start і фінальним пінгом дає ще й тривалість кожного запуску, тож завдання, що раптом тривають утричі довше, помітно одразу.
Швидкість

Наскільки пізно завдання може запуститись, перш ніж ви дізнаєтеся

У heartbeat немає перевірок за розкладом. Ви самі задаєте період, у який завдання має пінгувати, і запас часу; виявлення — це їхня сума.

Завдання запускається кожні
Запас часу
Про пропущений запуск дізнаєтеся через1,2 год

Пропущений пінг — це не мережеве вимірювання, тому підтвердження з кількох регіонів тут не потрібне: сповіщення йде щойно минув дедлайн.

Налаштування

Як налаштувати моніторинг cron-завдань за 30 секунд

1

Створіть heartbeat

Оберіть тип Heartbeat, назвіть завдання та задайте, як часто воно має пінгувати і скільки запасу часу допустимо, обидва значення в секундах.

2

Скопіюйте URL для пінга

Після збереження створюється унікальна адреса виду /hb/<token> на хості застосунку Tenium. Пінгувати може будь-хто, хто знає адресу, тому ставтеся до неї як до секрету.

3

Додайте до завдання один виклик

Допишіть виклик curl -fsS у рядок cron або викличте адресу в кінці свого скрипта.

4

Оберіть контакти для сповіщень

Пропуски heartbeat не проходять підтвердження з кількох регіонів, бо нічого мережевого не перевіряється.

Режими збоїв

Що означає кожна помилка

Це текст, який інцидент показує в рядку «Error», типова причина й що перевірити першим.

MISSEDHeartbeat missed, last ping 26 h ago

Дедлайн (період плюс запас) минув без пінга: під підозрою демон cron, сервер, скрипт або мережевий виклик. Спершу гляньте власний лог завдання.

Виглядає як: Heartbeat missed, last ping 26 h ago

NEVERHeartbeat missed, never pinged (created 3 h ago)

Монітор створено, але перший пінг так і не прийшов: зазвичай хибна адреса або завдання, яке ніколи не додали до розкладу.

Виглядає як: Heartbeat missed, never pinged (created 3 h ago)

/failJob reported failure (exit 2)

Ваш скрипт викликав /fail, тому інцидент відкривається одразу, а причиною стають ваше повідомлення чи код виходу. Чекати дедлайну не потрібно.

Виглядає як: Job reported failure (exit 2)

LATEJob ran, ping arrived late

Запуск виявився довшим за період плюс запас. Якщо це повторюється, збільште запас або виправте повільне завдання.

Виглядає як: Job ran, ping arrived late

SILENTScript failed but the ping still went out

Без && (або пастки з /fail) curl виконується, навіть якщо скрипт упав. Ставте пінг у ланцюжок після команди.

Виглядає як: Script failed but the ping still went out

Тарифи

Моніторинг cron-завдань: що входить у тарифи

Free
$0/міс.
Starter
$7/міс.
Pro
$29/міс.
Agency
$59/міс.
Доступно—✓✓✓
Монітори301003001000
Найшвидший інтервал5 хв1 хв30 с30 с
Регіони1222
Heartbeat для cron—20100500
Власні заголовки——✓✓
Сповіщення про повільну відповідь——✓✓
Ескалація на другий контакт——✓✓
Сторінки статусу1310Без обмежень

Ця перевірка доступна з тарифу Starter. Перевірки HTTP(S), ключових слів, ping і портів є на всіх тарифах.

Усі тарифи

Як визначається запізнення

У heartbeat-монітора є два числа, обидва в секундах: як часто завдання має пінгувати і скільки запасу часу допустимо. Дедлайн — це час останнього пінга про завершення плюс період плюс запас. Щойно годинник проходить цей момент, відкривається інцидент із повідомленням на кшталт «Heartbeat пропущено, останній пінг 26 годин тому». До першого пінга відлік іде від моменту створення монітора, тож новий heartbeat, від якого завдання так і не озвалося, теж сповіщає.

Дедлайн зсувається разом із кожним пінгом, а не прив’язаний до годинника на стіні. Нічний бекап із періодом 86400 і запасом 3600 вважається запізнілим, якщо наступний пінг надійшов пізніше ніж через 25 годин після попереднього. З цього є практичний висновок: обирайте запас так, щоб він покривав найдовший звичайний запуск разом із розкидом старту. Якщо завдання стартує о 03:00, зазвичай завершується до 03:20, але іноді триває 80 хвилин, запас у годину замалий, а дві години — безпечно. Дедлайни перевіряються з інтервалом самого монітора, тому сповіщення може відставати від дедлайну на один інтервал.

Три адреси

Після збереження монітора ви отримуєте адресу для пінга виду https://YOUR-APP-HOST/hb/hb_TOKEN. Токен — єдиний секрет, тому не кладіть його в публічні репозиторії. Працюють і GET, і POST, а успішний виклик відповідає «ok».

  • Сама адреса або /finish: завдання виконано. Дедлайн скидається, відкритий інцидент закривається, і надсилається сповіщення про відновлення.
  • /fail: завдання зазнало невдачі. Інцидент відкривається одразу, не чекаючи дедлайну, а причиною стає повідомлення, яке ви надіслали.
  • /start: завдання стартувало. Це зберігається в історії монітора, тож видно запуск, який почався й не завершився, але дедлайн не зсувається.
  • Нотатки: ?msg=текст або ?exit=2 у GET-запиті чи тіло POST до 10 КБ, наприклад хвіст логу. Інцидент покаже їх.

Рецепти з curl

Робіть ці однорядкові команди короткими, решту зробить оболонка. Підставте свою адресу.

  • Звичайний cron: 0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 3 https://YOUR-APP-HOST/hb/hb_TOKEN > /dev/null. Через && невдалий скрипт пінга не надсилає, і спрацьовує сповіщення про пропуск.
  • Негайне сповіщення про збій: backup.sh && curl -fsS $URL || curl -fsS "$URL/fail?msg=backup+failed". Друга гілка одразу відкриває інцидент.
  • Вивід у сповіщенні: out=$(backup.sh 2>&1); curl -fsS --data-binary "$out" $URL/finish. У гілці збою викликайте $URL/fail, щоб хвіст логу потрапив в інцидент.
  • systemd: додайте ExecStartPost=/usr/bin/curl -fsS https://YOUR-APP-HOST/hb/hb_TOKEN до сервісу типу oneshot, щоб виклик виконувався лише після успішного завершення основної команди.
  • Kubernetes CronJob або CI: поставте curl останнім кроком скрипта завдання, у GitHub Actions чи GitLab — завершальним кроком запланованого workflow.

Розклади, які форма не вміє описати

Heartbeat працює зі звичайним періодом, а не з виразом cron і не з часовим поясом. Тому завдання, що запускається лише у будні, потребує періоду, достатнього, щоб перекрити вихідні, наприклад 3 доби, а це означає, що збій у п’ятницю помітять лише в понеділок. Краще так: період в одну добу і два монітори, або нехай завдання пінгує щодня, включно з пінгом «робити нічого» у вихідні. Для щомісячних завдань підійде період 32 дні плюс добовий запас. Щоб порахувати справжній інтервал між запусками незвичного виразу, скористайтеся конструктором cron.

Що heartbeat помічає, а що ні

Він помічає все, що не дає завданню дійти до останнього рядка: зупинений демон cron, перезавантаження, після якого запис вимкнувся, заповнений диск, змінений PATH, прострочений пароль, завислий процес, який ніколи не завершується, і помилкову правку crontab. Він не може знати, що завдання, яке завершилось, виконалось ще й правильно. Скрипт бекапу, який завершується з кодом нуль після запису порожнього файла, спокійно надішле пінг. Ставте пінг після кроку перевірки, наприклад після тесту розміру файла чи підрахунку рядків, щоб успіх щось означав.

Heartbeat не проходить підтвердження з кількох регіонів, бо нічого мережевого не перевіряється: сервер або озвався, або ні. Пропущений пінг під час активного вікна обслуговування не відкриває інциденту, а монітор на паузі продовжує записувати пінги без сповіщень.

Ліміти й тарифи

Heartbeat-монітори починаються зі Starter, на Free їх немає. Кількість: 20 на Starter, 100 на Pro і 500 на Agency. Кожна адреса для пінга приймає до 30 викликів на хвилину, а з однієї IP-адреси на всі токени разом дозволено 60. Понад це ендпоінт відповідає 429, тож пінгувати частіше ніж раз на кілька секунд із завантаженого циклу немає сенсу. Для воркерів черг пінгуйте раз на хвилину з періодом 120 і запасом 60. Канали сповіщень такі самі, як для будь-якого монітора, а для нічного завдання, яке не може не виконатись, з тарифу Pro доступна ескалація, див. ескалацію сповіщень. Формати адрес наведено в документації heartbeat API.

Запитання: моніторинг cron-завдань

Що робити, якщо сервер не має виходу в інтернет?

Завдання має зробити один вихідний HTTPS-запит, тож ізольований від мережі хост не може відзвітувати напряму. Нехай сусідня машина, яка бачить нас, викликає heartbeat після того, як прочитає файл статусу з ізольованої.

Чи можна створювати heartbeat через API?

Так, як монітор типу heartbeat із періодом і запасом часу. Запит показано в документації API, а доступ на запис потребує тарифу Pro або вище.

Чи захищена адреса для пінга автентифікацією?

Обліковими даними слугує випадковий токен в адресі. Якщо він витік, видаліть монітор і створіть новий, щоб стара адреса перестала працювати.

Чи враховуються пінги як перевірки, за які я плачу?

Ні. Heartbeat — це один монітор у загальному ліміті тарифу, і кількість пінгів на це не впливає, крім ліміту частоти.

Спробуйте моніторинг cron-завдань на Starter

Ця перевірка починається з тарифу Starter за $7 на місяць. Тариф Free, без банківської картки, дає 30 моніторів із перевірками HTTP(S), ключових слів, ping і портів.