Orbit
وظائف Orbit المجدولة
Cron jobs schedule recurring HTTP requests to your deployed project, so a nightly cleanup, an hourly sync or a weekly digest runs on time without you standing up a separate scheduler.
مهام Cron تجدول طلبات HTTP متكررة لمشروعك المنشور، لذا يعمل التنظيف الليلي أو المزامنة بالساعة أو الملخص الأسبوعي في الوقت المحدد دون الحاجة إلى إعداد جدولة منفصلة.
مكان وجود مهام Cron
افتح Orbit، انقر على المشروع، واختر Crons ضمن مجموعة Configure في شريط علامات تبويب المشروع. تحمل الصفحة عنوان Cron jobs وتصف ما تفعله: جدولة طلبات HTTP لنشرك الإنتاجي، باستخدام بناء cron القياسي بخمسة حقول بتوقيت UTC، أو الأسماء المستعارة @hourly و @daily و @weekly و @monthly.
تعرض الصفحة Target host الذي ستستدعيه، بحيث يمكنك التأكد بسرعة من أنها تشير إلى النشر الصحيح.

كيفية العمل
لا تقوم Orbit بتشغيل الكود الخاص بك في جدولة. بدلاً من ذلك، تستدعي عنوان URL على مشروعك الخاص وفقاً لجدول زمني، ويقوم الكود الخاص بك بالعمل.
هذا يعني أن الشيء الذي تجدوله هو مسار عادي في تطبيقك، على سبيل المثال /api/cron/cleanup. أي شيء يمكن لتطبيقك القيام به استجابة لطلب، يمكنه القيام به وفقاً لجدول.
إنشاء مهمة Cron
- انقر على New cron.
- أعطها Name، حتى 120 حرفاً.
- عيّن Path على مشروعك، بدءاً بشرطة مائلة.
- اختر Schedule من الإعدادات المسبقة أو اكتب تعبيراً.
- اختر Method.
GETهو الافتراضي. - أضف Request body إذا كانت الطريقة POST أو PUT أو PATCH.
- عيّن Timeout بين 1 و 300 ثانية. القيمة الافتراضية هي 30.
- اترك خيار Generate a Bearer secret محددة ما لم يكن لديك خاصتك.
- انقر على Create cron.
إعدادات Schedule المسبقة
| الإعداد المسبق | التعبير |
|---|---|
| كل 5 دقائق | */5 * * * * |
| كل 15 دقيقة | */15 * * * * |
| كل ساعة | @hourly |
| يومياً 09:00 UTC | 0 9 * * * |
| منتصف الليل يومياً | @daily |
| الإثنين 09:00 أسبوعياً | 0 9 * * 1 |
| اليوم الأول من الشهر | @monthly |
أو اكتب تعبيرك الخاص بخمسة حقول: الدقيقة والساعة واليوم من الشهر والشهر واليوم من الأسبوع.
جميع الجداول الزمنية بتوقيت UTC، بدون تعديل التوقيت الصيفي. المهمة المعينة لـ 0 9 * * * تعمل في الساعة التاسعة صباحاً بتوقيت UTC على مدار السنة، والتي تنجرف بساعة واحدة مقابل توقيت نيوزيلندا مرتين في السنة. إذا كان يجب تشغيل المهمة في وقت محلي محدد، اختر ساعة UTC عن قصد وسجل نصف السنة التي قمت بتحسينها للحصول عليها.
المصادقة على الاستدعاء
ترك خيار Bearer secret محدداً يولد رمزاً عشوائياً يتم إرساله كرأس Authorization عند كل تنفيذ. يتم عرضه مرة واحدة فقط مباشرة بعد الإنشاء، مع ملاحظة بأنه لن يتم عرضه مرة أخرى.
انسخه وتحقق منه في معالجك:
export async function GET(req) {
const auth = req.headers.get('authorization');
if (auth !== `Bearer ${process.env.CRON_SECRET}`) {
return new Response('Unauthorized', { status: 401 });
}
// do the work
}
خزّن السر باستخدام متغيرات البيئة للمشروع: انظر Environment Variables in Orbit.
بدون فحص مثل هذا، مسار cron الخاص بك هو عنوان URL عام يمكن لأي شخص استدعاؤه كلما يشاء. هذا جيد لشيء غير ضار وخطير جداً لأي شيء يكتب أو يرسل بريداً إلكترونياً أو يكلف المال. أضف الفحص قبل التشغيل الأول، وليس بعد أن يجد شخص ما نقطة النهاية.
يمكنك أيضاً إرسال رؤوسك الخاصة بدلاً من ذلك، إذا كان تطبيقك يملك بالفعل مخطط مصادقة.
قراءة قائمة المهام
تعرض كل مهمة:
- Schedule، التعبير الذي تعمل عليه.
- Next، متى ستعمل مرة أخرى.
- Last، متى عملت آخر مرة وكيف حدث ذلك.
- عداد ok / fail.
- Last error، حيث ترك آخر فشل رسالة.
- شارة PAUSED عند إيقافها.
هناك أربع إجراءات على كل صف: Run now و Pause أو Resume و Delete.
يؤدي Run now إلى تنفيذ المهمة على الفور، بغض النظر عن جدولتها، والإبلاغ عن النتيجة. إنها الطريقة الصحيحة لاختبار مهمة جديدة بدلاً من انتظار المرة التالية.
نتائج التنفيذ
| الحالة | المعنى |
|---|---|
| OK | أرجع نقطة النهاية الخاصة بك استجابة نجاح |
| FAILED | أرجعت نقطة النهاية الخاصة بك خطأ، أو لم يتمكن الطلب من تقديمه |
| TIMEOUT | لم ترد نقطة النهاية الخاصة بك في غضون المهلة الزمنية |
| SKIPPED | لم يتم تنفيذ التنفيذ |
يتم تسجيل كل تنفيذ مع حالته ورمز الاستجابة والمدة والخطأ والذي أطلقه، لذا فإن المهمة التي تفشل بشكل متقطع تترك مسار يمكنك قراءته بدلاً من "آخر خطأ" واحد.
اختيار المهلة الزمنية
المهلة الزمنية لكل تنفيذ، بين 1 و 300 ثانية، بقيمة افتراضية 30.
عيّنها قليلاً فوق أسوأ حالة حقيقية للمهمة، وليس بعيداً. المهلة الزمنية السخية على مهمة معلقة تعني خمس دقائق من بناء ينتظر لا شيء. المهلة الضيقة على مهمة تستغرق شرعياً دقيقتين تعني فشلاً دائماً وتنبيهاً مضللاً.
من الأفضل الاحتفاظ بالمعالج سريعاً: اطلب العمل وعد على الفور، بدلاً من القيام بالعمل المضمن. مهمة cron تعود في 200 ميلي ثانية لا تنتهي أبداً.
الحدود
يمكن للمشروع أن يحتوي على 50 مهمة cron كحد أقصى. هذا لكل مشروع، لذا يمتلك الحساب الذي يحتوي على عدة مشاريع المزيد إجمالاً.
إذا كنت بحاجة إلى جدولة شيء ما مقابل التطوير بدلاً من الإنتاج، استخدم Cron triggers في Settings بدلاً من ذلك. تتيح لك تلك البطاقة اختيار البيئة، وتقتصر على عشرة محفزات لكل مشروع. انظر Orbit Project Settings.
حذف مهمة
انقر على Delete وأكّد. يلاحظ التأكيد أن سجل التنفيذ سيتم حذفه أيضاً، لذا إذا كنت تريد سجلاً عن كيفية تصرف المهمة، احسبها قبل الحذف.
توقف بدلاً من الحذف عند إيقاف مهمة مؤقتاً. يحافظ الإيقاف على التكوين والسر والسجل سليماً.
نصائح عملية
اجعل المعالجات idempotent. يمكن إعادة محاولة استدعاء cron، و Run now يمكن الضغط عليه أثناء تشغيل جدول زمني بالفعل. يجب أن يتعامل معالجك مع التشغيل مرتين دون القيام بالعمل مرتين.
لا تجدول كل شيء في الساعة. 0 * * * * على كل مهمة يعني أن كل مهمة تتنافس في نفس اللحظة. انشرهم: 7 * * * * و 23 * * * *، وهكذا.
سجل داخل المعالج الخاص بك. يخبرك سجل التنفيذ برمز الاستجابة والمدة. ما حدث بالفعل هو عمل تطبيقك، وستريده عندما تفعل المهمة بصمت لا شيء.
استكشاف الأخطاء
كل تنفيذ FAILED مع 401. المعالج الخاص بك يرفض الطلب. تحقق من أن السر المخزن في متغيرات البيئة الخاصة بك يطابق ما تم إنشاؤه هنا، بما في ذلك بادئة Bearer في المقارنة.
كل تنفيذ FAILED مع 404. المسار غير موجود على المشروع المنشور. اختبره في متصفح مقابل المضيف المستهدف الموضح على الصفحة.
التنفيذات TIMEOUT. المعالج يفعل الكثير المضمن. قسّم العمل، أو رفع المهلة الزمنية إذا استغرق العمل فعلاً هذا الوقت وليس بعيداً.
Next لا يتقدم أبداً. المهمة موقوفة. ابحث عن شارة PAUSED.
المهمة تعمل في الوقت الخاطئ. تحقق من UTC مقابل الوقت المحلي الخاص بك. هذا هو المفاجأة الوحيدة الأكثر شيوعاً مع الوظائف المجدولة.
أين تذهب بعد ذلك
- Environment Variables in Orbit لتخزين سر cron.
- Orbit Project Settings لمحفزات cron لكل بيئة.
- Orbit Webhooks ليتم إخبارك عندما تسير الأمور بشكل خاطئ.