ابرووا
شروع رایگان
☰ فهرست مستندات · مانیتور کران‌جاب

مانیتورینگ cron

کارهای زمان‌بندی‌شده و cron jobها را با check-inهای HTTP مانیتور کنید. وقتی کاری check-in نفرستد، از طریق ایمیل، webhook یا یکپارچگی‌های دیگر باخبر شوید و اجراهای ناموفق را در کنسول ببینید. SDK لازم نیست.

RESTcurlNode.jsPythonLaravelبه‌روزرسانی: ۵ آبان ۱۴۰۵
مانیتورینگ cron

کارهای زمان‌بندی‌شده و cron jobهای خود را مانیتور کنید. وقتی check-inی نرسد، ابرووا تریس از طریق یکپارچگی‌هایی که تنظیم کرده‌اید خبرتان می‌کند و اجراهای ناموفق را ثبت می‌کند. SDK لازم نیست؛ هر کلاینت HTTP می‌تواند check-in بفرستد.

مانیتورهای رایگان.

۳ مانیتور cron رایگان در هر ماه. هر مانیتور اضافه ماهانه ۲٬۰۰۰ تومان هزینه از کیف پول دارد؛ قیمت‌ها را ببینید. خود check-inها هزینه‌ای ندارند.

نیاز به کلید سرور. check-inها کلید سرور شما (ab_srv_…) را در هدر X-API-Key می‌فرستند. آن‌ها را از سرور یا CI و با یک متغیر محیطی اجرا کنید؛ هرگز از داخل اپ.

مانیتورینگ cron#

کارهای زمان‌بندی‌شده و cron jobها را با check-inهای HTTP مانیتور کنید. برای check-inهای نرسیده از طریق ایمیل، webhook یا یکپارچگی‌های دیگر باخبر می‌شوید؛ اجراهای ناموفق ثبت و روی مانیتور نمایش داده می‌شوند. SDK لازم نیست؛ هر کلاینت HTTP می‌تواند check-in بفرستد.

چطور کار می‌کند

  1. ساختن مانیتور: در کنسول ابرووا یک مانیتور cron با slug یکتا، زمان‌بندی (عبارت cron یا فاصله‌ی زمانی) و مهلت اضافه تعریف کنید.
  2. ارسال check-in: cron job شما هر بار که اجرا می‌شود یک HTTP POST به API مربوط به check-in می‌فرستد. SDK لازم نیست؛ فقط یک فراخوانی ساده‌ی HTTP.
  3. تشخیص کارهای اجرانشده: ابرووا تریس هر ۵ دقیقه همه‌ی مانیتورها را بررسی می‌کند. اگر check-in دیر شده باشد (بیشتر از فاصله‌ی مورد انتظار به‌علاوه‌ی مهلت اضافه)، وضعیت مانیتور به «missed» تغییر می‌کند.
  4. دریافت اعلان: وقتی کاری اجرا نشده باشد، اعلان به یکپارچگی‌هایی که روی مانیتور انتخاب کرده‌اید (ایمیل، Webhook و غیره) فرستاده می‌شود.

ساختن مانیتور (داشبورد)

  1. در کنسول ابرووا، پروژه‌تان را باز کنید ← ابرووا تریس ← Crons
  2. روی «مانیتور جدید» کلیک کنید
  3. جزئیات مانیتور را پر کنید (پیکربندی پایین را ببینید)
  4. در صورت تمایل، کانال‌های اعلان را از میان یکپارچگی‌های فعال انتخاب کنید
  5. برای ذخیره روی «ساخت مانیتور» کلیک کنید

مدیریت مانیتورها (ساختن، ویرایش، توقف موقت، حذف) نقش admin یا owner می‌خواهد؛ همه‌ی نقش‌ها می‌توانند مانیتورها و تاریخچه‌ی check-inهایشان را ببینند. نقش‌ها و دسترسی‌ها را ببینید.

پیکربندی مانیتور

گزینهنوعاجباریتوضیح
Namestringبلهنام توصیفی (مثلاً «Daily Database Backup»)
Slugstringبلهشناسه‌ی یکتایی که در API مربوط به check-in استفاده می‌شود (مثلاً «daily-backup»). خودکار از روی نام ساخته می‌شود.
Schedulestringخیرعبارت cron (مثلاً «0 2 * * *»). اگر تنظیم شود، فاصله‌ی مورد انتظار را همین تعیین می‌کند.
Expected Intervalnumberبلههر چند وقت یک بار کار باید اجرا شود، بر حسب دقیقه (پیش‌فرض: ۶۰). وقتی عبارت cron تنظیم نشده باشد استفاده می‌شود.
Grace Periodnumberبلهدقیقه‌های اضافه‌ی انتظار پیش از missed حساب کردن (پیش‌فرض: ۵)
Environmentstringخیرفیلتر بر اساس محیط (مثلاً production)
Notification Channelsmulti-selectخیراز میان یکپارچگی‌های فعال خود انتخاب کنید

ارسال check-in از کارها

وقتی cron job اجرا می‌شود، یک HTTP POST به endpoint مربوط به check-in بفرستید. با کلید سرور پروژه (ab_srv_...) در هدر X-API-Key احراز هویت کنید. اگر slug هنوز وجود نداشته باشد، مانیتور خودکار ساخته می‌شود.

کدام کلید؟

cron jobها روی سرورهای شما اجرا می‌شوند، پس از کلید سرور استفاده کنید. کلید اپ (ab_live_...) هم تا وقتی تنظیم پروژه‌ی server routeها به server secret نیاز دارند خاموش است پذیرفته می‌شود؛ اما این کلید داخل اپ‌های شما منتشر می‌شود، پس هر کسی آن را استخراج کند می‌تواند check-in جعلی «ok» بفرستد. وقتی کارهایتان از کلید سرور استفاده کردند، این تنظیم را روشن کنید. کلید سرور و routeهای سرور را ببینید.

ساخت خودکار مانیتور.

اگر check-inی با slugی بفرستید که وجود ندارد، ابرووا تریس خودکار مانیتوری با تنظیمات پیش‌فرض (فاصله‌ی ۶۰ دقیقه، مهلت اضافه‌ی ۵ دقیقه) می‌سازد. بعد می‌توانید آن را در داشبورد شخصی‌سازی کنید.

API مربوط به check-in

POSThttps://trace.abrova.ir/api/cron-monitors/check-in
فیلدنوعالزامیتوضیح
monitor_slugstringبلهslug یکتای مانیتور
statusstringبله"ok"، "error" یا "in_progress"
check_in_idstringخیرUUID برای دنبال کردن کارهای چندمرحله‌ای (به‌صورت `id` از in_progress برگردانده می‌شود)
duration_msnumberخیرمدت اجرای کار بر حسب میلی‌ثانیه
environmentstringخیرنام محیط (مثلاً "production")
messagestringخیرپیام یا جزئیات خطا (اختیاری)

مثال‌ها

check-in ساده (curl)

وقتی کار با موفقیت تمام شد، یک check-in با وضعیت «ok» بفرستید:

bash
curl -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
  -H "X-API-Key: ab_srv_your_server_secret" \
  -H "Content-Type: application/json" \
  -d '{
    "monitor_slug": "daily-backup",
    "status": "ok",
    "duration_ms": 4500
  }'

گزارش خطا (curl)

اگر کار شکست خورد، آن را با وضعیت «error» گزارش کنید:

bash
curl -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
  -H "X-API-Key: ab_srv_your_server_secret" \
  -H "Content-Type: application/json" \
  -d '{
    "monitor_slug": "daily-backup",
    "status": "error",
    "message": "Connection to database timed out"
  }'

کار چندمرحله‌ای (curl)

برای کارهای طولانی، با «in_progress» شروع کنید و با «ok» یا «error» تمام کنید:

bash
# Step 1: Mark job as in_progress (returns a check_in_id)
CHECK_IN_ID=$(curl -s -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: ab_srv_your_server_secret" \
-H "Content-Type: application/json" \
-d '{"monitor_slug": "nightly-report", "status": "in_progress"}' \
| jq -r '.id')

# ... run your job ...

# Step 2: Mark job as complete
curl -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: ab_srv_your_server_secret" \
-H "Content-Type: application/json" \
-d "{
  \"monitor_slug\": \"nightly-report\",
  \"status\": \"ok\",
  \"check_in_id\": \"$CHECK_IN_ID\",
  \"duration_ms\": 120000
}"

Node.js

javascript
const axios = require('axios');

const API_KEY = process.env.ABROVA_SERVER_SECRET; // ab_srv_...
const BASE_URL = 'https://trace.abrova.ir/api/cron-monitors/check-in';

async function runDailyBackup() {
  const start = Date.now();

  try {
    // ... your backup logic here ...
    await performBackup();

    // Report success
    await axios.post(BASE_URL, {
      monitor_slug: 'daily-backup',
      status: 'ok',
      duration_ms: Date.now() - start,
    }, { headers: { 'X-API-Key': API_KEY } });

  } catch (error) {
    // Report failure
    await axios.post(BASE_URL, {
      monitor_slug: 'daily-backup',
      status: 'error',
      duration_ms: Date.now() - start,
      message: error.message,
    }, { headers: { 'X-API-Key': API_KEY } });
  }
}

Python

python
import os
import requests
import time

API_KEY = os.environ["ABROVA_SERVER_SECRET"]  # ab_srv_...
BASE_URL = "https://trace.abrova.ir/api/cron-monitors/check-in"

def run_daily_backup():
    start = time.time()
    headers = {"X-API-Key": API_KEY, "Content-Type": "application/json"}

    try:
        # ... your backup logic here ...
        perform_backup()

        # Report success
        requests.post(BASE_URL, json={
            "monitor_slug": "daily-backup",
            "status": "ok",
            "duration_ms": int((time.time() - start) * 1000),
        }, headers=headers)

    except Exception as e:
        # Report failure
        requests.post(BASE_URL, json={
            "monitor_slug": "daily-backup",
            "status": "error",
            "duration_ms": int((time.time() - start) * 1000),
            "message": str(e),
        }, headers=headers)

Laravel (دستور Artisan)

php
<?php
// In your scheduled command or Kernel.php

use Illuminate\Support\Facades\Http;

$start = microtime(true);

try {
  // ... your job logic ...
  $this->performCleanup();

  Http::withHeaders([
      'X-API-Key' => env('ABROVATRACE_SERVER_SECRET'),
  ])->post('https://trace.abrova.ir/api/cron-monitors/check-in', [
      'monitor_slug' => 'daily-cleanup',
      'status' => 'ok',
      'duration_ms' => (int)((microtime(true) - $start) * 1000),
  ]);

} catch (\Exception $e) {
  Http::withHeaders([
      'X-API-Key' => env('ABROVATRACE_SERVER_SECRET'),
  ])->post('https://trace.abrova.ir/api/cron-monitors/check-in', [
      'monitor_slug' => 'daily-cleanup',
      'status' => 'error',
      'message' => $e->getMessage(),
  ]);
}

اسکریپت Bash

هر cron jobی را با یک فراخوانی ساده‌ی check-in در انتها بپوشانید:

bash
#!/bin/bash
# Add this to the end of your cron job script

API_KEY="$ABROVA_SERVER_SECRET"   # ab_srv_...

# Run your job
/usr/local/bin/my-backup-script.sh

# Report based on exit code
if [ $? -eq 0 ]; then
  curl -s -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
    -H "X-API-Key: $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"monitor_slug": "my-backup", "status": "ok"}'
else
  curl -s -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
    -H "X-API-Key: $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"monitor_slug": "my-backup", "status": "error"}'
fi

وضعیت‌های مانیتور

OK

آخرین check-in موفق بوده است

Error

آخرین check-in خطا گزارش کرده است

Missed

در زمان مورد انتظار هیچ check-inی نرسیده است

Disabled

مانیتور موقتاً متوقف است

مرجع API

cron job شما check-inها را به یک endpoint عمومی می‌فرستد:

POST /api/cron-monitors/check-in

این endpoint یک اعتبارنامه‌ی پروژه را در هدر X-API-Key می‌گیرد: کلید سرور (توصیه‌شده)، یا کلید اپ تا وقتی تنظیم «server routeها به server secret نیاز دارند» خاموش است.

مانیتورها را در کنسول ابرووا مدیریت کنید. این‌که کاربر واردشده آنجا چه کارهایی می‌تواند بکند به نقشش بستگی دارد؛ نقش‌ها و دسترسی‌ها را ببینید.

بهترین روش‌ها

slugهای گویا انتخاب کنید

slugهایی مثل «daily-backup»، «hourly-sync» یا «weekly-report» انتخاب کنید که کار را به‌روشنی معرفی کنند.

مهلت اضافه‌ی مناسب بگذارید

برای نوسان طبیعی مدت اجرای کار فاصله‌ی کافی بگذارید. مهلت ۵ دقیقه برای بیشتر کارها کافی است؛ برای کارهایی با زمان اجرای متغیر مهلت بیشتری بدهید.

خطا را هم گزارش کنید، نه فقط موفقیت

وقتی کاری شکست می‌خورد همیشه check-inی با وضعیت «error» بفرستید. این‌طور هم کارهای اجرانشده و هم کارهای ناموفق را می‌بینید.

مدت را ثبت کنید

duration_ms را در check-inها بفرستید تا افت عملکرد را در طول زمان ببینید.

برای کارهای طولانی از حالت چندمرحله‌ای استفاده کنید

برای کارهایی که دقیقه‌ها یا ساعت‌ها طول می‌کشند، الگوی in_progress و سپس ok/error را به کار ببرید. این‌طور می‌توانید «هنوز در حال اجرا» را از «اجرانشده» تشخیص دهید.

اعلان‌ها را تنظیم کنید

دست‌کم یک یکپارچگی وصل کنید (ایمیل یا Webhook بدون اتصال به خارج از ایران کار می‌کنند) تا وقتی کاری اجرا نشد هشدار بگیرید.

عیب‌یابی

مانیتور missed نشان می‌دهد اما کار اجرا شده است؟
  • مطمئن شوید کلید درست و فعال است؛ وضعیت HTTP پاسخ check-in را ببینید؛ 401 یعنی رد شده است
  • مطمئن شوید monitor_slug دقیقاً یکی است
  • مطمئن شوید درخواست check-in به سرور می‌رسد (شبکه و firewall را بررسی کنید)
  • فاصله‌ی مورد انتظار را بازبینی کنید؛ اگر کار هر ۲۴ ساعت اجرا می‌شود، فاصله را ۱۴۴۰ دقیقه بگذارید
  • مهلت اضافه را بررسی کنید؛ اگر زمان شروع کار متغیر است آن را بیشتر کنید
اعلان کارهای اجرانشده نمی‌رسد؟
  • مطمئن شوید روی مانیتور کانال اعلان انتخاب شده است
  • مطمئن شوید یکپارچگی‌های انتخاب‌شده فعال‌اند (در ابرووا تریس ← یکپارچه‌سازی‌ها تستشان کنید)
  • تشخیص کارهای اجرانشده هر ۵ دقیقه انجام می‌شود؛ ممکن است کمی تأخیر باشد
  • مطمئن شوید مانیتور فعال است (غیرفعال یا خاموش نشده باشد)
API مربوط به check-in خطای 401 می‌دهد؟
  • مطمئن شوید کلید با ab_srv_ (یا ab_live_) شروع می‌شود
  • اگر پاسخ server_credential_required می‌گوید، تنظیم پروژه‌ی server routeها به server secret نیاز دارند روشن است و کار کلید اپ را فرستاده؛ از کلید سرور استفاده کنید
  • مطمئن شوید کلید در هدر X-API-Key فرستاده می‌شود
  • مطمئن شوید کلید API متعلق به پروژه‌ی فعالی است که ابرووا تریس در آن فعال است
نمی‌توانید مانیتور دیگری بسازید؟
  • ۳ مانیتور رایگان است؛ مانیتورهای بیشتر از کیف پول سازمان پرداخت می‌شوند (ماهانه ۲٬۰۰۰ تومان برای هر مانیتور اضافه)
  • کیف پول را در کنسول ابرووا شارژ کنید، یا مانیتوری را که دیگر لازم ندارید حذف کنید
مانیتور خودکارساخته تنظیمات اشتباه دارد؟
  • مانیتورهای خودکارساخته از مقادیر پیش‌فرض استفاده می‌کنند (فاصله‌ی ۶۰ دقیقه، مهلت ۵ دقیقه)
  • در کنسول ابرووا به ابرووا تریس ← Crons بروید و مانیتور را ویرایش کنید
  • یا از اول مانیتور را با تنظیمات دلخواه در داشبورد بسازید
این صفحه مفید بود؟
گزارش مشکل