وظائف Cron (مجدول Gateway)
Cron أم نبضة القلب؟ انظر Cron مقابل نبضة القلب للحصول على إرشادات حول متى تستخدم كلًا منهما.Cron هو المجدول المدمج في Gateway. يقوم بحفظ المهام، وإيقاظ الوكيل في الوقت المناسب، ويمكنه اختياريًا إيصال المخرجات إلى محادثة. إذا كنت تريد «تشغيل هذا كل صباح» أو «تنبيه الوكيل بعد 20 دقيقة»، فإن cron هو الآلية المناسبة. استكشاف الأخطاء وإصلاحها: /automation/troubleshooting
TL;DR
- يعمل Cron داخل Gateway (وليس داخل النموذج).
- تستمر المهام تحت
~/.openclaw/cron/بحيث لا تفقد الجداول عند إعادة التشغيل. - نمطان للتنفيذ:
- الجلسة الرئيسية: إدراج حدث نظام، ثم التشغيل في نبضة القلب التالية.
- معزول: تشغيل دور وكيل مخصص في
cron:<jobId>، مع التسليم (إعلان افتراضيًا أو بدون).
- الإيقاظات من الدرجة الأولى: يمكن للمهمة طلب «الإيقاظ الآن» مقابل «نبضة القلب التالية».
البدء السريع (عملي)
أنشئ تذكيرًا لمرة واحدة، تحقق من وجوده، وشغّله فورًا:مكافئات استدعاء الأدوات (أداة cron في Gateway)
لأشكال JSON القياسية والأمثلة، راجع مخطط JSON لاستدعاءات الأدوات.أين تُخزَّن وظائف cron
تُحفَظ وظائف cron على مضيف Gateway افتراضيًا في~/.openclaw/cron/jobs.json.
يقوم Gateway بتحميل الملف إلى الذاكرة وكتابته عند التغييرات، لذا فإن التعديلات اليدوية
آمنة فقط عندما يكون Gateway متوقفًا. فضّل openclaw cron add/edit أو واجهة استدعاء أدوات cron
لإجراء التغييرات.
نظرة عامة مناسبة للمبتدئين
فكّر في مهمة cron على أنها: متى يتم التشغيل + ماذا يتم التنفيذ.-
اختر الجدول
- تذكير لمرة واحدة →
schedule.kind = "at"(CLI:--at) - مهمة متكررة →
schedule.kind = "every"أوschedule.kind = "cron" - إذا كان طابع ISO الزمني يفتقد منطقة زمنية، فسيُعامَل على أنه UTC.
- تذكير لمرة واحدة →
-
اختر مكان التنفيذ
sessionTarget: "main"→ التشغيل خلال نبضة القلب التالية مع السياق الرئيسي.sessionTarget: "isolated"→ تشغيل دور وكيل مخصص فيcron:<jobId>.
-
اختر الحمولة
- الجلسة الرئيسية →
payload.kind = "systemEvent" - الجلسة المعزولة →
payload.kind = "agentTurn"
- الجلسة الرئيسية →
schedule.kind = "at") تُحذف افتراضيًا بعد النجاح. عيّن
deleteAfterRun: false للاحتفاظ بها (سيتم تعطيلها بعد النجاح).
المفاهيم
المهام
مهمة cron هي سجل محفوظ يحتوي على:- جدول (متى يجب أن تعمل)،
- حمولة (ما الذي يجب فعله)،
- وضع تسليم اختياري (إعلان أو بدون).
- ارتباط وكيل اختياري (
agentId): تشغيل المهمة تحت وكيل محدد؛ وإذا كان مفقودًا أو غير معروف، يعود Gateway إلى الوكيل الافتراضي.
jobId ثابت (تستخدمه واجهات CLI/Gateway).
في استدعاءات أدوات الوكيل، يُعد jobId هو القياسي؛ ويُقبل القديم id للتوافق.
تُحذف مهام المرة الواحدة تلقائيًا بعد النجاح افتراضيًا؛ اضبط deleteAfterRun: false للاحتفاظ بها.
الجداول
يدعم Cron ثلاثة أنواع من الجداول:at: طابع زمني لمرة واحدة عبرschedule.at(ISO 8601).every: فاصل ثابت (بالمللي ثانية).cron: تعبير cron من 5 حقول مع منطقة زمنية IANA اختيارية.
croner. إذا أُهملت المنطقة الزمنية، تُستخدم المنطقة الزمنية
المحلية لمضيف Gateway.
التنفيذ الرئيسي مقابل المعزول
مهام الجلسة الرئيسية (أحداث النظام)
تُدرج المهام الرئيسية حدث نظام ويمكنها اختياريًا إيقاظ مشغّل نبضة القلب. يجب أن تستخدمpayload.kind = "systemEvent".
wakeMode: "now"(افتراضي): يُطلق الحدث تشغيلًا فوريًا لنبضة القلب.wakeMode: "next-heartbeat": ينتظر الحدث حتى نبضة القلب المجدولة التالية.
المهام المعزولة (جلسات cron مخصصة)
تُشغِّل المهام المعزولة دور وكيل مخصص في الجلسةcron:<jobId>.
السلوكيات الأساسية:
- تُسبق المطالبة بـ
[cron:<jobId> <job name>]لأغراض التتبّع. - يبدأ كل تشغيل معرّف جلسة جديد (من دون ترحيل محادثة سابقة).
- السلوك الافتراضي: إذا أُهمل
delivery، تعلن المهام المعزولة ملخصًا (delivery.mode = "announce"). delivery.mode(خاص بالمعزول) يحدد ما يحدث:announce: تسليم ملخص إلى القناة المستهدفة ونشر ملخص موجز في الجلسة الرئيسية.none: داخلي فقط (لا تسليم ولا ملخص للجلسة الرئيسية).
- يتحكم
wakeModeفي توقيت نشر ملخص الجلسة الرئيسية:now: نبضة قلب فورية.next-heartbeat: ينتظر نبضة القلب المجدولة التالية.
أشكال الحمولة (ما يجري)
يدعم نوعان من الحمولات:systemEvent: خاص بالجلسة الرئيسية، يمر عبر مطالبة نبضة القلب.agentTurn: خاص بالجلسة المعزولة، يشغّل دور وكيل مخصص.
agentTurn الشائعة:
message: نص المطالبة المطلوب.model/thinking: تجاوزات اختيارية (انظر أدناه).timeoutSeconds: تجاوز مهلة اختياري.
delivery.mode:none|announce.delivery.channel:lastأو قناة محددة.delivery.to: هدف خاص بالقناة (هاتف/دردشة/معرّف قناة).delivery.bestEffort: تجنّب فشل المهمة إذا فشل تسليم الإعلان.
delivery.channel/delivery.to
لاستهداف الدردشة بدلًا من ذلك. عندما يكون delivery.mode = "none"، لا يُنشر ملخص في الجلسة الرئيسية.
إذا أُهمل delivery للمهام المعزولة، فإن OpenClaw يضبطه افتراضيًا على announce.
تدفّق تسليم الإعلان
عندما يكونdelivery.mode = "announce"، يقوم cron بالتسليم مباشرة عبر محوّلات القنوات الصادرة.
لا يتم تشغيل الوكيل الرئيسي لصياغة الرسالة أو تمريرها.
تفاصيل السلوك:
- المحتوى: يستخدم التسليم حمولات الإخراج للتشغيل المعزول (نص/وسائط) مع التقسيم والتنسيق الطبيعيين للقناة.
- استجابات نبضة القلب فقط (
HEARTBEAT_OKدون محتوى حقيقي) لا يتم تسليمها. - إذا كان التشغيل المعزول قد أرسل رسالة بالفعل إلى الهدف نفسه عبر أداة المراسلة، يتم تخطي التسليم لتجنّب التكرار.
- الأهداف المفقودة أو غير الصالحة تُفشل المهمة ما لم يكن
delivery.bestEffort = true. - يُنشر ملخص قصير في الجلسة الرئيسية فقط عندما يكون
delivery.mode = "announce". - يحترم ملخص الجلسة الرئيسية
wakeMode: يُطلقnowنبضة قلب فورية بينما ينتظرnext-heartbeatنبضة القلب المجدولة التالية.
تجاوزات النموذج ومستوى التفكير
يمكن للمهام المعزولة (agentTurn) تجاوز النموذج ومستوى التفكير:
model: سلسلة الموفّر/النموذج (مثلanthropic/claude-sonnet-4-20250514) أو اسم مستعار (مثلopus)thinking: مستوى التفكير (off،minimal،low،medium،high،xhigh; نماذج GPT-5.2 + Codex فقط)
model لمهام الجلسة الرئيسية، لكنه يغيّر نموذج
الجلسة الرئيسية المشتركة. نوصي بتجاوزات النموذج للمهام المعزولة فقط لتجنّب
تحوّلات غير متوقعة في السياق.
أولوية الحل:
- تجاوز حمولة المهمة (الأعلى)
- الإعدادات الافتراضية الخاصة بالخطّاف (مثل
hooks.gmail.model) - الإعداد الافتراضي لتهيئة الوكيل
التسليم (القناة + الهدف)
يمكن للمهام المعزولة تسليم المخرجات إلى قناة عبر تهيئةdelivery ذات المستوى الأعلى:
delivery.mode:announce(تسليم ملخص) أوnone.delivery.channel:whatsapp/telegram/discord/slack/mattermost(إضافة) /signal/imessage/last.delivery.to: هدف مستلم خاص بالقناة.
sessionTarget: "isolated").
إذا أُهمل delivery.channel أو delivery.to، يمكن لـ cron الرجوع إلى «المسار الأخير»
للجلسة الرئيسية (آخر مكان رد فيه الوكيل).
تذكيرات تنسيق الهدف:
- يجب أن تستخدم أهداف Slack/Discord/Mattermost (إضافة) بادئات صريحة (مثل
channel:<id>،user:<id>) لتجنّب الالتباس. - يجب أن تستخدم موضوعات Telegram صيغة
:topic:(انظر أدناه).
أهداف تسليم Telegram (الموضوعات / سلاسل المنتدى)
يدعم Telegram موضوعات المنتدى عبرmessage_thread_id. لتسليم cron، يمكنك ترميز
الموضوع/السلسلة في الحقل to:
-1001234567890(معرّف الدردشة فقط)-1001234567890:topic:123(المفضّل: وسم موضوع صريح)-1001234567890:123(اختصار: لاحقة رقمية)
telegram:... / telegram:group:...:
telegram:group:-1001234567890:topic:123
مخطط JSON لاستدعاءات الأدوات
استخدم هذه الأشكال عند استدعاء أدواتcron.* في Gateway مباشرة (استدعاءات أدوات الوكيل أو RPC).
تقبل أعلام CLI مددًا بشرية مثل 20m، لكن يجب أن تستخدم استدعاءات الأدوات
سلسلة ISO 8601 لـ schedule.at ومللي ثانية لـ schedule.everyMs.
معاملات cron.add
مهمة لمرة واحدة، جلسة رئيسية (حدث نظام):schedule.kind:at(at)،every(everyMs)، أوcron(expr، اختياريtz).- يقبل
schedule.atصيغة ISO 8601 (المنطقة الزمنية اختيارية؛ تُعامل كـ UTC عند الإهمال). everyMsبالمللي ثانية.- يجب أن يكون
sessionTargetإما"main"أو"isolated"ويجب أن يطابقpayload.kind. - الحقول الاختيارية:
agentId،description،enabled،deleteAfterRun(افتراضيًا true لـat)،delivery. - افتراضي
wakeModeهو"now"عند الإهمال.
معاملات cron.update
- يُعد
jobIdهو القياسي؛ ويُقبلidللتوافق. - استخدم
agentId: nullفي التصحيح لمسح ارتباط وكيل.
معاملات cron.run و cron.remove
التخزين والسجل
- مخزن المهام:
~/.openclaw/cron/jobs.json(JSON مُدار من Gateway). - سجل التشغيل:
~/.openclaw/cron/runs/<jobId>.jsonl(JSONL، يُنقّى تلقائيًا). - تجاوز مسار التخزين:
cron.storeفي التهيئة.
التهيئة
cron.enabled: false(تهيئة)OPENCLAW_SKIP_CRON=1(متغير بيئة)
البدء السريع عبر CLI
تذكير لمرة واحدة (ISO UTC، حذف تلقائي بعد النجاح):--due للتشغيل فقط عند الاستحقاق):
واجهة Gateway البرمجية
cron.list،cron.status،cron.add،cron.update،cron.removecron.run(قسر أو مستحق)،cron.runsللأحداث النظامية الفورية دون مهمة، استخدمopenclaw system event.
استكشاف الأخطاء وإصلاحها
«لا شيء يعمل»
- تحقّق من تمكين cron:
cron.enabledوOPENCLAW_SKIP_CRON. - تحقّق من أن Gateway يعمل باستمرار (cron يعمل داخل عملية Gateway).
- لجدولات
cron: أكّد المنطقة الزمنية (--tz) مقابل منطقة زمنية المضيف.
مهمة متكررة تستمر في التأخير بعد الإخفاقات
- يطبّق OpenClaw تراجع إعادة المحاولة الأسي للمهام المتكررة بعد أخطاء متتالية: 30 ثانية، 1 دقيقة، 5 دقائق، 15 دقيقة، ثم 60 دقيقة بين المحاولات.
- يُعاد ضبط التراجع تلقائيًا بعد التشغيل الناجح التالي.
- مهام المرة الواحدة (
at) تُعطَّل بعد تشغيل نهائي (ok،error، أوskipped) ولا تعيد المحاولة.
Telegram يسلّم إلى المكان الخطأ
- لموضوعات المنتدى، استخدم
-100…:topic:<id>ليكون صريحًا وغير ملتبس. - إذا رأيت بادئات
telegram:...في السجلات أو في أهداف «المسار الأخير» المخزّنة، فهذا طبيعي؛ يقبل تسليم cron هذه الصيغ ويحلّل معرّفات الموضوعات بشكل صحيح.