وظائف Cron
Cron مقابل Heartbeat؟ راجع Cron مقابل Heartbeat للحصول على إرشادات حول متى تستخدم كل منهما.
Cron هو برنامج الجدولة المدمج في البوابة. يقوم بتخزين الوظائف، وإيقاظ الوكيل في الوقت المناسب، ويمكنه اختياريًا تسليم الناتج مرة أخرى إلى محادثة. إذا كنت تريد "تشغيل هذا كل صباح" أو "تنبيه الوكيل بعد 20 دقيقة"، فإن cron هو الآلية. استكشاف الأخطاء وإصلاحها: /automation/troubleshooting
ملخص سريع
- يعمل Cron داخل البوابة (وليس داخل النموذج).
- يتم تخزين الوظائف في
~/.openclaw/cron/حتى لا تضيع الجداول عند إعادة التشغيل. - أسلوبان للتنفيذ:
- الجلسة الرئيسية: قم بإدراج حدث نظام في قائمة الانتظار، ثم تشغيله في نبض القلب التالي.
- المعزول: تشغيل دورة وكيل مخصصة في
cron:<jobId>، مع التسليم (الإعلان افتراضيًا أو لا شيء).
- عمليات الإيقاظ أساسية: يمكن للوظيفة طلب "الإيقاظ الآن" مقابل "نبض القلب التالي".
- نشر Webhook يكون لكل وظيفة عبر
delivery.mode = "webhook"+delivery.to = "<url>". - يظل التراجع القديم موجودًا للوظائف المخزنة مع
notify: trueعندما يتم تعيينcron.webhook، قم بترحيل تلك الوظائف إلى وضع تسليم webhook.
البدء السريع (قابل للتنفيذ)
قم بإنشاء تذكير لمرة واحدة، وتحقق من وجوده، وقم بتشغيله فورًا:
openclaw cron add \
--name "Reminder" \
--at "2026-02-01T16:00:00Z" \
--session main \
--system-event "Reminder: check the cron docs draft" \
--wake now \
--delete-after-run
openclaw cron list
openclaw cron run <job-id>
openclaw cron runs --id <job-id>
جدولة وظيفة معزولة متكررة مع التسليم:
openclaw cron add \
--name "Morning brief" \
--cron "0 7 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--message "Summarize overnight updates." \
--announce \
--channel slack \
--to "channel:C1234567890"
المعادلات باستدعاء الأداة (أداة cron الخاصة بالبوابة)
للأشكال JSON والأمثلة الأساسية، راجع مخطط JSON لاستدعاءات الأدوات.
مكان تخزين وظائف cron
يتم تخزين وظائف cron على مضيف البوابة في ~/.openclaw/cron/jobs.json افتراضيًا. تقوم البوابة بتحميل الملف إلى الذاكرة وإعادة كتابته عند إجراء تغييرات، لذا فإن التعديلات اليدوية آمنة فقط عند إيقاف البوابة. يُفضل استخدام 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 هي سجل مخزن يحتوي على:
- جدول زمني (متى يجب أن تعمل)،
- حمولة (ماذا يجب أن تفعل)،
- وضع تسليم اختياري (
announce,webhook, أوnone). - ربط وكيل اختياري (
agentId): تشغيل الوظيفة تحت وكيل محدد؛ إذا كان مفقودًا أو غير معروف، تعود البوابة إلى الوكيل الافتراضي.
يتم التعرف على الوظائف بواسطة jobId ثابت (يستخدمه CLI/واجهات برمجة تطبيقات البوابة). في استدعاءات أدوات الوكيل، يكون jobId هو الأساسي؛ يتم قبول id القديم لأغراض التوافق. الوظائف لمرة واحدة تحذف تلقائيًا بعد النجاح افتراضيًا؛ قم بتعيين deleteAfterRun: false للاحتفاظ بها.
الجداول الزمنية
يدعم Cron ثلاثة أنواع من الجداول الزمنية:
at: طابع زمني لمرة واحدة عبرschedule.at(ISO 8601).every: فاصل زمني ثابت (مللي ثانية).cron: تعبير cron مكون من 5 حقول (أو 6 حقول مع الثواني) مع منطقة زمنية IANA اختيارية.
تستخدم تعبيرات cron croner. إذا تم حذف المنطقة الزمنية، يتم استخدام المنطقة الزمنية المحلية لمضيف البوابة. لتقليل ذروة الحمل في بداية الساعة عبر العديد من البوابات، يطبق OpenClaw نافذة تأخير حتمية لكل وظيفة تصل إلى 5 دقائق لتعبيرات cron المتكررة في بداية الساعة (على سبيل المثال 0 * * * *, 0 */2 * * *). تظل تعبيرات الساعة الثابتة مثل 0 7 * * * دقيقة. لأي جدول cron، يمكنك تعيين نافذة تأخير صريحة باستخدام schedule.staggerMs (0 يحافظ على التوقيت الدقيق). اختصارات CLI:
--stagger 30s(أو1m,5m) لتعيين نافذة تأخير صريحة.--exactلإجبارstaggerMs = 0.
التنفيذ الرئيسي مقابل المعزول
وظائف الجلسة الرئيسية (أحداث النظام)
تقوم الوظائف الرئيسية بإدراج حدث نظام في قائمة الانتظار واختياريًا إيقاظ مُشغل نبض القلب. يجب أن تستخدم payload.kind = "systemEvent".
wakeMode: "now"(الافتراضي): يؤدي الحدث إلى تشغيل نبض قلب فوري.wakeMode: "next-heartbeat": ينتظر الحدث نبض القلب المجدول التالي.
هذا هو الأنسب عندما تريد مطالبة نبض القلب العادية + سياق الجلسة الرئيسية. راجع نبض القلب.
الوظائف المعزولة (جلسات cron مخصصة)
تعمل الوظائف المعزولة على تشغيل دورة وكيل مخصصة في الجلسة cron:<jobId>. السلوكيات الرئيسية:
- يبدأ المطالبة بـ
[cron:<jobId> <job name>]لإمكانية التتبع. - يبدأ كل تشغيل معرف جلسة جديد (بدون حمل محادثة سابقة).
- السلوك الافتراضي: إذا تم حذف
delivery، تعلن الوظائف المعزولة عن ملخص (delivery.mode = "announce"). - يختار
delivery.modeما يحدث:announce: تسليم ملخص إلى القناة المستهدفة ونشر ملخص موجز في الجلسة الرئيسية.webhook: إرسال POST لحمولة الحدث المنتهي إلىdelivery.toعندما يتضمن الحدث المنتهي ملخصًا.none: داخلي فقط (لا تسليم، ولا ملخص للجلسة الرئيسية).
- يتحكم
wakeModeفي وقت نشر ملخص الجلسة الرئيسية:now: نبض قلب فوري.next-heartbeat: ينتظر نبض القلب المجدول التالي.
استخدم الوظائف المعزولة للمهام الصاخبة أو المتكررة أو "المهام الخلفية" التي لا ينبغي أن تملأ سجل المحادثة الرئيسي.
أشكال الحمولة (ما يتم تشغيله)
يتم دعم نوعين من الحمولة:
systemEvent: للجلسة الرئيسية فقط، يتم توجيهها عبر مطالبة نبض القلب.agentTurn: للجلسة المعزولة فقط، تشغل دورة وكيل مخصصة.
الحقول الشائعة في agentTurn:
message: المطالبة النصية المطلوبة.model/thinking: تجاوزات اختيارية (انظر أدناه).timeoutSeconds: تجاوز مهلة اختياري.lightContext: وضع تمهيد خفيف الوزن اختياري للوظائف التي لا تحتاج إلى حقن ملفات تمهيد مساحة العمل.
تكوين التسليم:
delivery.mode:none|announce|webhook.delivery.channel:lastأو قناة محددة.delivery.to: هدف خاص بالقناة (للإعلان) أو عنوان URL لـ webhook (وضع webhook).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إلى انتظار نبض القلب المجدول التالي.
تدفق تسليم Webhook
عندما يكون delivery.mode = "webhook"، يقوم cron بنشر حمولة الحدث المنتهي إلى delivery.to عندما يتضمن الحدث المنتهي ملخصًا. تفاصيل السلوك:
- يجب أن يكون النقطة الطرفية عنوان URL HTTP(S) صالحًا.
- لا تتم محاولة تسليم القناة في وضع webhook.
- لا يتم نشر ملخص للجلسة الرئيسية في وضع webhook.
- إذا تم تعيين
cron.webhookToken، فإن رأس المصادقة هوAuthorization: Bearer <cron.webhookToken>. - التراجع القديم: لا تزال الوظائف المخزنة القديمة مع
notify: trueتنشر إلىcron.webhook(إذا تم تكوينها)، مع تحذير حتى تتمكن من الترحيل إلىdelivery.mode = "webhook".
تجاوزات النموذج ومستوى التفكير
يمكن للوظائف المعزولة (agentTurn) تجاوز النموذج ومستوى التفكير:
model: سلسلة المزود/النموذج (مثل،anthropic/claude-sonnet-4-20250514) أو اسم مستعار (مثل،opus)thinking: مستوى التفكير (off,minimal,low,medium,high,xhigh؛ نماذج GPT-5.2 + Codex فقط)
ملاحظة: يمكنك تعيين model على وظائف الجلسة الرئيسية أيضًا، لكنه يغير نموذج الجلسة الرئيسية المشترك. نوصي بتجاوزات النموذج للوظائف المعزولة فقط لتجنب تحولات السياق غير المتوقعة. أولوية الحل:
- تجاوز حمولة الوظيفة (الأعلى)
- الإعدادات الافتراضية الخاصة بالخطاف (مثل،
hooks.gmail.model) - الإعداد الافتراضي لتكوين الوكيل
سياق التمهيد خفيف الوزن
يمكن للوظائف المعزولة (agentTurn) تعيين lightContext: true للتشغيل بسياق تمهيد خفيف الوزن.
- استخدم هذا للمهام المجدولة التي لا تحتاج إلى حقن ملفات تمهيد مساحة العمل.
- عمليًا، يعمل وقت التشغيل المضمن مع
bootstrapContextMode: "lightweight"، والذي يحافظ على سياق تمهيد cron فارغًا عن قصد. - معادلات CLI:
openclaw cron add --light-context ...وopenclaw cron edit --light-context.
التسليم (القناة + الهدف)
يمكن للوظائف المعزولة تسليم الناتج إلى قناة عبر تكوين delivery على المستوى الأعلى:
delivery.mode:announce(تسليم القناة)،webhook(HTTP POST)، أوnone.delivery.channel:whatsapp/telegram/discord/slack/mattermost(المكون الإضافي) /signal/imessage/last.delivery.to: هدف المستلم الخاص بالقناة.
تسليم announce صالح فقط للوظائف المعزولة (sessionTarget: "isolated"). تسليم webhook صالح لكل من الوظائف الرئيسية والمعزولة. إذا تم حذف 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.* الخاصة بالبوابة مباشرة (استدعاءات أداة الوكيل أو RPC). تقبل أعلام CLI فترات زمنية بشرية مثل 20m، لكن يجب أن تستخدم استدعاءات الأداة سلسلة ISO 8601 لـ schedule.at ومللي ثانية لـ schedule.everyMs.
معلمات cron.add
وظيفة لمرة واحدة، جلسة رئيسية (حدث نظام):
{
"name": "Reminder",
"schedule": { "kind": "at", "at": "2026-02-01T16:00:00Z" },
"sessionTarget": "main",
"wakeMode": "now",
"payload": { "kind": "systemEvent", "text": "Reminder text" },
"deleteAfterRun": true
}
وظيفة متكررة، معزولة مع التسليم:
{
"name": "Morning brief",
"schedule": { "kind": "cron", "expr": "0 7 * * *", "tz": "America/Los_Angeles" },
"sessionTarget": "isolated",
"wakeMode": "next-heartbeat",
"payload": {
"kind": "agentTurn",
"message": "Summarize overnight updates.",
"lightContext": true
},
"delivery": {
"mode": "announce",
"channel": "slack",
"to": "channel:C1234567890",
"bestEffort": true
}
}
ملاحظات:
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": "job-123",
"patch": {
"enabled": false,
"schedule": { "kind": "every", "everyMs": 3600000 }
}
}
ملاحظات:
jobIdهو الأساسي؛ يتم قبولidلأغراض التوافق.- استخدم
agentId: nullفي التصحيح لمسح ربط الوكيل.
معلمات cron.run و cron.remove
{ "jobId": "job-123", "mode": "force" }
{ "jobId": "job-123" }
التخزين والتاريخ
- مخزن الوظائف:
~/.openclaw/cron/jobs.json(JSON تديره البوابة). - سجل التشغيل:
~/.openclaw/cron/runs/<jobId>.jsonl(JSONL، يتم التقليم التلقائي حسب الحجم وعدد الأسطر). - يتم تقليم جلسات تشغيل cron المعزولة في
sessions.jsonبواسطةcron.sessionRetention(الافتراضي24h؛ قم بتعيينfalseلتعطيل). - تجاوز مسار التخزين:
cron.storeفي التكوين.
سياسة إعادة المحاولة
عند فشل وظيفة، يصنف OpenClaw الأخطاء على أنها عابرة (قابلة لإعادة المحاولة) أو دائمة (تعطيل فوري).
أخطاء عابرة (يتم إعادة محاولتها)
- حد المعدل (429، طلبات كثيرة جدًا، استنفاد الموارد)
- حمل زائد للمزود (على سبيل المثال Anthropic
529 overloaded_error، ملخصات التراجع عند الحمل الزائد) - أخطاء الشبكة (مهلة، ECONNRESET، فشل الجلب، مقبس)
- أخطاء الخادم (5xx)
- أخطاء متعلقة بـ Cloudflare
أخطاء دائمة (لا إعادة محاولة)
- فشل المصادقة (مفتاح API غير صالح، غير مصرح)
- أخطاء التكوين أو التحقق
- أخطاء أخرى غير عابرة
السلوك الافتراضي (بدون تكوين)
الوظائف لمرة واحدة (schedule.kind: "at"):
- عند حدوث خطأ عابر: إعادة المحاولة حتى 3 مرات مع تراجع أسي (30s → 1m → 5m).
- عند حدوث خطأ دائم: تعطيل فوري.
- عند النجاح أو التخطي: تعطيل (أو حذف إذا كان
deleteAfterRun: true).
الوظائف المتكررة (cron / every):
- عند أي خطأ: تطبيق تراجع أسي (30s → 1m → 5m → 15m → 60m) قبل التشغيل المجدول التالي.
- تظل الوظيفة مفعلة؛ يتم إعادة تعيين التراجع بعد التشغيل الناجح التالي.
قم بتكوين cron.retry لتجاوز هذه الإعدادات الافتراضية (راجع التكوين).
التكوين
{
cron: {
enabled: true, // default true
store: "~/.openclaw/cron/jobs.json",
maxConcurrentRuns: 1, // default 1
// Optional: override retry policy for one-shot jobs
retry: {
maxAttempts: 3,
backoffMs: [60000, 120000, 300000],
retryOn: ["rate_limit", "overloaded", "network", "server_error"],
},
webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs
webhookToken: "replace-with-dedicated-webhook-token", // optional bearer token for webhook mode
sessionRetention: "24h", // duration string or false
runLog: {
maxBytes: "2mb", // default 2_000_000 bytes
keepLines: 2000, // default 2000
},
},
}
سلوك تقليم سجل التشغيل:
cron.runLog.maxBytes: الحد الأقصى لحجم ملف سجل التشغيل قبل التقليم.cron.runLog.keepLines: عند التقليم، احتفظ فقط بأحدث N سطر.- ينطبق كلاهما على ملفات
cron/runs/<jobId>.jsonl.
سلوك Webhook:
- مفضل: قم بتعيين
delivery.mode: "webhook"معdelivery.to: "https://..."لكل وظيفة. - يجب أن تكون عناوين URL لـ webhook صالحة
http://أوhttps://. - عند النشر، تكون الحمولة هي JSON لحدث cron المنتهي.
- إذا تم تعيين
cron.webhookToken، فإن رأس المصادقة هوAuthorization: Bearer <cron.webhookToken>. - إذا لم يتم تعيين
cron.webhookToken، لا يتم إرسال رأسAuthorization. - التراجع القديم: لا تزال الوظائف المخزنة القديمة مع
notify: trueتستخدمcron.webhookعند وجودها.
تعطيل cron بالكامل:
cron.enabled: false(تكوين)OPENCLAW_SKIP_CRON=1(متغير بيئة)
الصيانة
يحتوي Cron على مسارين مدمجين للصيانة: الاحتفاظ بجلسات التشغيل المعزولة وتقليم سجل التشغيل.
الإعدادات الافتراضية
cron.sessionRetention:24h(قم بتعيينfalseلتعطيل تقليم جلسة التشغيل)cron.runLog.maxBytes:2_000_000بايتcron.runLog.keepLines:2000
كيفية العمل
- تقوم عمليات التشغيل المعزولة بإنشاء إدخالات جلسة (
...:cron:<jobId>:run:<uuid>) وملفات النصوص. - يقوم الحاصد بإزالة إدخالات جلسات التشغيل المنتهية الصلاحية الأقدم من
cron.sessionRetention. - لجلسات التشغيل التي تمت إزالتها ولم يعد يتم الرجوع إليها بواسطة مخزن الجلسات، يقوم OpenClaw بأرشفة ملفات النصوص وتنظيف الأرشيفات المحذوفة القديمة في نفس نافذة الاحتفاظ.
- بعد كل إلحاق للتشغيل، يتم فحص حجم
cron/runs/<jobId>.jsonl:- إذا تجاوز حجم الملف
runLog.maxBytes، يتم تقليمه إلى أحدثrunLog.keepLinesسطر.
- إذا تجاوز حجم الملف
تحذير الأداء لمجدولي الحجم العالي
يمكن لإعدادات cron عالية التردد إنشاء بصمات كبيرة لجلسات التشغيل وسجلات التشغيل. الصيانة مدمجة، لكن الحدود الفضفاضة يمكن أن تخلق عبء I/O وعمل تنظيف يمكن تجنبه. ما يجب مراقبته:
- نافذة
cron.sessionRetentionطويلة مع العديد من عمليات التشغيل المعزولة cron.runLog.keepLinesعالي مجتمع معrunLog.maxBytesكبير- العديد من الوظائف المتكررة الصاخبة التي تكتب في نفس
cron/runs/<jobId>.jsonl
ما يجب فعله:
- احتفظ بـ
cron.sessionRetentionقصيرًا قدر ما تسمح به احتياجات التصحيح/التدقيق الخاصة بك - احتفظ بسجلات التشغيل محدودة بـ
runLog.maxBytesوrunLog.keepLinesمعتدلين - انقل الوظائف الخلفية الصاخبة إلى الوضع المعزول مع قواعد تسليم تتجنب الثرثرة غير الضرورية
- راجع النمو بشكل دوري باستخدام
openclaw cron runsوضبط الاحتفاظ قبل أن تصبح السجلات كبيرة
أمثلة التخصيص
احتفظ بجلسات التشغيل لمدة أسبوع واسمح بسجلات تشغيل أكبر:
{
cron: {
sessionRetention: "7d",
runLog: {
maxBytes: "10mb",
keepLines: 5000,
},
},
}
عطل تقليم جلسات التشغيل المعزولة ولكن احتفظ بتقليم سجل التشغيل:
{
cron: {
sessionRetention: false,
runLog: {
maxBytes: "5mb",
keepLines: 3000,
},
},
}
ضبط لاستخدام cron عالي الحجم (مثال):
{
cron: {
sessionRetention: "12h",
runLog: {
maxBytes: "3mb",
keepLines: 1500,
},
},
}
بدء سريع لـ CLI
تذكير لمرة واحدة (UTC ISO، حذف تلقائي بعد النجاح):
openclaw cron add \
--name "Send reminder" \
--at "2026-01-12T18:00:00Z" \
--session main \
--system-event "Reminder: submit expense report." \
--wake now \
--delete-after-run
تذكير لمرة واحدة (جلسة رئيسية، إيقاظ فوري):
openclaw cron add \
--name "Calendar check" \
--at "20m" \
--session main \
--system-event "Next heartbeat: check calendar." \
--wake now
وظيفة معزولة متكررة (الإعلان إلى WhatsApp):
openclaw cron add \
--name "Morning status" \
--cron "0 7 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--message "Summarize inbox + calendar for today." \
--announce \
--channel whatsapp \
--to "+15551234567"
وظيفة cron متكررة مع تأخير صريح 30 ثانية:
openclaw cron add \
--name "Minute watcher" \
--cron "0 * * * * *" \
--tz "UTC" \
--stagger 30s \
--session isolated \
--message "Run minute watcher checks." \
--announce
وظيفة معزولة متكررة (التسليم إلى موضوع Telegram):
openclaw cron add \
--name "Nightly summary (topic)" \
--cron "0 22 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--message "Summarize today; send to the nightly topic." \
--announce \
--channel telegram \
--to "-1001234567890:topic:123"
وظيفة معزولة مع تجاوز النموذج ومستوى التفكير:
openclaw cron add \
--name "Deep analysis" \
--cron "0 6 * * 1" \
--tz "America/Los_Angeles" \
--session isolated \
--message "Weekly deep analysis of project progress." \
--model "opus" \
--thinking high \
--announce \
--channel whatsapp \
--to "+15551234567"
اختيار الوكيل (إعدادات متعددة الوكلاء):
# تثبيت وظيفة على الوكيل "ops" (يعود إلى الافتراضي إذا كان هذا الوكيل مفقودًا)
openclaw cron add --name "Ops sweep" --cron "0 6 * * *" --session isolated --message "Check ops queue" --agent ops
# تبديل أو مسح الوكيل في وظيفة موجودة
openclaw cron edit <jobId> --agent ops
openclaw cron edit <jobId> --clear-agent
تشغيل يدوي (force هو الافتراضي، استخدم --due للتشغيل فقط عند الاستحقاق):
openclaw cron run <jobId>
openclaw cron run <jobId> --due
تحرير وظيفة موجودة (تصحيح الحقول):
openclaw cron edit <jobId> \
--message "Updated prompt" \
--model "opus" \
--thinking low
إجبار وظيفة cron موجودة على التشغيل بالضبط حسب الجدول (بدون تأخير):
openclaw cron edit <jobId> --exact
سجل التشغيل:
openclaw cron runs --id <jobId> --limit 50
حدث نظام فوري دون إنشاء وظيفة:
openclaw system event --mode now --text "Next heartbeat: check battery."
سطح واجهة برمجة تطبيقات البوابة
cron.list,cron.status,cron.add,cron.update,cron.removecron.run(force أو due),cron.runsلأحداث النظام الفورية بدون وظيفة، استخدمopenclaw system event.
استكشاف الأخطاء وإصلاحها
"لا شيء يعمل"
- تحقق من تفعيل cron:
cron.enabledوOPENCLAW_SKIP_CRON. - تحقق من أن البوابة تعمل باستمرار (يعمل cron داخل عملية البوابة).
- لجداول
cron: تأكد من المنطقة