CLI commands
Cron
openclaw cron
إدارة مهام Cron لمجدول Gateway.
إنشاء المهام بسرعة
openclaw cron create هو اسم بديل لـ openclaw cron add. للمهام الجديدة، ضع الجدول أولاً والموجّه ثانياً:
openclaw cron create "0 7 * * *" \ "Summarize overnight updates." \ --name "Morning brief" \ --agent opsاستخدم --webhook <url> عندما يجب أن ترسل المهمة حمولة النتيجة النهائية عبر POST بدلاً من تسليمها إلى هدف محادثة:
openclaw cron create "0 18 * * 1-5" \ "Summarize today's deploys as JSON." \ --name "Deploy digest" \ --webhook "https://example.invalid/openclaw/cron"استخدم --command للمهام الحتمية بنمط الصدفة التي يجب تشغيلها داخل OpenClaw cron دون بدء تشغيل وكيل/نموذج معزول:
openclaw cron create "*/15 * * * *" \ --name "Queue depth probe" \ --command "scripts/check-queue.sh" \ --command-cwd "/srv/app" \ --announce \ --channel telegram \ --to "-1001234567890"يخزن --command <shell> القيمة argv: ["sh", "-lc", <shell>]. استخدم --command-argv '["node","scripts/report.mjs"]' لتنفيذ argv بدقة. تلتقط مهام الأوامر stdout/stderr، وتسجل سجل Cron العادي، وتوجه المخرجات عبر أوضاع التسليم نفسها announce أو webhook أو none كما في المهام المعزولة. يتم كتم الأمر الذي يطبع NO_REPLY فقط.
الجلسات
يقبل --session القيم main أو isolated أو current أو session:<id>.
مفاتيح الجلسات
- يربط
mainبجلسة الوكيل الرئيسية. - ينشئ
isolatedنصاً حوارياً جديداً ومعرّف جلسة جديداً لكل تشغيل. - يربط
currentبالجلسة النشطة وقت الإنشاء. - يثبّت
session:<id>على مفتاح جلسة مستمر صريح.
دلالات الجلسة المعزولة
تعيد التشغيلات المعزولة ضبط سياق المحادثة المحيط. تتم إعادة ضبط توجيه القناة والمجموعة، وسياسة الإرسال/الطابور، والرفع، والأصل، وربط وقت تشغيل ACP للتشغيل الجديد. يمكن أن تنتقل التفضيلات الآمنة وتجاوزات النموذج أو المصادقة التي اختارها المستخدم صراحةً بين التشغيلات.
التسليم
يعرض openclaw cron list وopenclaw cron show <job-id> معاينة لمسار التسليم المحلول. بالنسبة إلى channel: "last"، تعرض المعاينة ما إذا كان المسار قد حُل من الجلسة الرئيسية أو الحالية، أو سيفشل بإغلاق آمن.
يمكن للأهداف مسبوقة المزوّد إزالة اللبس عن قنوات الإعلان غير المحلولة. على سبيل المثال، يختار to: "telegram:123" Telegram عندما يكون delivery.channel محذوفاً أو last. البادئات التي يعلن عنها Plugin المحمّل فقط هي محددات مزوّدين. إذا كان delivery.channel صريحاً، فيجب أن تطابق البادئة تلك القناة؛ يتم رفض channel: "whatsapp" مع to: "telegram:123". تظل بادئات الخدمة مثل imessage: وsms: صيغة هدف مملوكة للقناة.
ملكية التسليم
تسليم محادثة Cron المعزول مشترك بين الوكيل والمشغّل:
- يمكن للوكيل الإرسال مباشرةً باستخدام أداة
messageعندما يكون مسار محادثة متاحاً. - يسلّم
announceالرد النهائي كاحتياطي فقط عندما لا يرسل الوكيل مباشرةً إلى الهدف المحلول. - ينشر
webhookحمولة النتيجة النهائية إلى URL. - يعطّل
noneالتسليم الاحتياطي من المشغّل.
استخدم cron add|create --webhook <url> أو cron edit <job-id> --webhook <url> لتعيين تسليم Webhook. لا تجمع --webhook مع علامات تسليم المحادثة مثل --announce أو --no-deliver أو --channel أو --to أو --thread-id أو --account.
يمكن لـ cron edit <job-id> إلغاء تعيين حقول توجيه التسليم الفردية باستخدام --clear-channel و--clear-to و--clear-thread-id و--clear-account (يُرفض كل منها عند جمعه مع علامة التعيين المطابقة له). بخلاف --no-deliver، الذي يعطّل فقط التسليم الاحتياطي من المشغّل، تزيل هذه الخيارات الحقل المخزن بحيث تحل المهمة ذلك الجزء من مسارها من القيم الافتراضية مرة أخرى.
--announce هو التسليم الاحتياطي من المشغّل للرد النهائي. يعطّل --no-deliver ذلك الاحتياطي لكنه لا يزيل أداة message الخاصة بالوكيل عندما يكون مسار محادثة متاحاً.
تحافظ التذكيرات المنشأة من محادثة نشطة على هدف تسليم المحادثة الحي لتسليم الإعلان الاحتياطي. قد تكون مفاتيح الجلسات الداخلية بأحرف صغيرة؛ لا تستخدمها كمصدر حقيقة لمعرفات المزوّد الحساسة لحالة الأحرف مثل معرّفات غرف Matrix.
تسليم الفشل
تُحل إشعارات الفشل بهذا الترتيب:
delivery.failureDestinationفي المهمة.cron.failureDestinationالعام.- هدف الإعلان الأساسي للمهمة (عند عدم تعيين وجهة فشل صريحة).
ملاحظة: تتعامل تشغيلات Cron المعزولة مع إخفاقات الوكيل على مستوى التشغيل كأخطاء مهمة حتى عندما لا يتم إنتاج حمولة رد، لذلك تظل إخفاقات النموذج/المزوّد تزيد عدادات الأخطاء وتشغّل إشعارات الفشل.
لا تبدأ مهام Cron الخاصة بالأوامر دورة وكيل معزولة. يسجل رمز خروج صفري
ok؛ أما الخروج غير الصفري أو الإشارة أو انتهاء المهلة أو انتهاء مهلة غياب المخرجات فيسجل error ويمكنه
تشغيل مسار إشعار الفشل نفسه.
إذا انتهت مهلة تشغيل معزول قبل أول طلب نموذج، فإن openclaw cron show
وopenclaw cron runs يتضمنان خطأ خاصاً بالمرحلة مثل
setup timed out before runner start أو
stalled before first model call (last phase: context-engine).
بالنسبة إلى المزوّدين المدعومين عبر CLI، يظل مراقب ما قبل النموذج نشطاً حتى تبدأ دورة
CLI الخارجية، لذلك تُبلّغ توقفات البحث عن الجلسة، والربط، والمصادقة، والموجّه، وإعداد CLI
كإخفاقات Cron قبل النموذج.
الجدولة
مهام لمرة واحدة
يجدول --at <datetime> تشغيلاً لمرة واحدة. تُعامل التواريخ والأوقات بلا إزاحة كـ UTC ما لم تمرر أيضاً --tz <iana>، الذي يفسر وقت الساعة الحائطية في المنطقة الزمنية المعطاة.
المهام المتكررة
تستخدم المهام المتكررة تراجع إعادة المحاولة الأسي بعد الأخطاء المتتالية: 30s، 1m، 5m، 15m، 60m. يعود الجدول إلى حالته الطبيعية بعد التشغيل الناجح التالي.
تُتبع التشغيلات المتخطاة بشكل منفصل عن أخطاء التنفيذ. لا تؤثر في تراجع إعادة المحاولة، لكن يمكن لـ openclaw cron edit <job-id> --failure-alert-include-skipped إدخال تنبيهات الفشل في إشعارات التشغيلات المتخطاة المتكررة.
بالنسبة إلى المهام المعزولة التي تستهدف مزوّد نموذج محلياً مهيأً، يشغّل Cron فحصاً تمهيدياً خفيفاً للمزوّد قبل بدء دورة الوكيل. تُفحص مزوّدات api: "ollama" على loopback والشبكات الخاصة و.local عند /api/tags؛ وتُفحص مزوّدات OpenAI المتوافقة المحلية مثل vLLM وSGLang وLM Studio عند /models. إذا تعذر الوصول إلى نقطة النهاية، يُسجل التشغيل كـ skipped وتُعاد المحاولة في جدول لاحق؛ وتُخزن نقاط النهاية الميتة المطابقة مؤقتاً لمدة 5 دقائق لتجنب أن تضغط مهام كثيرة على الخادم المحلي نفسه.
ملاحظة: تعيش مهام Cron وحالة وقت التشغيل المعلقة وسجل التشغيل في قاعدة بيانات الحالة المشتركة SQLite. يتم استيراد ملفات jobs.json وjobs-state.json وruns/*.jsonl القديمة مرة واحدة وإعادة تسميتها بلاحقة .migrated. بعد الاستيراد، عدّل الجداول باستخدام openclaw cron add|edit|remove بدلاً من تعديل ملفات JSON.
التشغيلات اليدوية
يشغّل openclaw cron run <job-id> بالقوة افتراضياً ويعود بمجرد إدراج التشغيل اليدوي في الطابور. تتضمن الاستجابات الناجحة { ok: true, enqueued: true, runId }. استخدم runId المُعاد لفحص النتيجة اللاحقة:
openclaw cron run <job-id>openclaw cron runs --id <job-id> --run-id <run-id>أضف --wait عندما يجب أن يحظر نص برمجي التنفيذ حتى يسجل ذلك التشغيل المدرج تحديداً حالة نهائية:
openclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2sمع --wait، لا يزال CLI يستدعي cron.run أولاً، ثم يستطلع cron.runs من أجل runId المُعاد. يخرج الأمر بـ 0 فقط عندما ينتهي التشغيل بالحالة ok. يخرج بغير صفر عندما ينتهي التشغيل بـ error أو skipped، أو عندما لا تتضمن استجابة Gateway قيمة runId، أو عند انتهاء --wait-timeout. يجب أن تكون قيمة --poll-interval أكبر من صفر.
النماذج
يحدد cron add|edit --model <ref> نموذجاً مسموحاً للمهمة. يعيّن cron add|edit --fallbacks <list> نماذج احتياطية لكل مهمة، على سبيل المثال --fallbacks openrouter/gpt-4.1-mini,openai/gpt-5؛ مرر --fallbacks "" لتشغيل صارم بلا احتياطيات. يزيل cron edit <job-id> --clear-fallbacks تجاوز الاحتياطيات لكل مهمة. يزيل cron edit <job-id> --clear-model تجاوز النموذج لكل مهمة بحيث تتبع المهمة أسبقية اختيار نموذج Cron العادية (تجاوز جلسة Cron مخزن إن وجد، وإلا نموذج الوكيل/الافتراضي)؛ ولا يمكن جمعه مع --model. يعيّن cron add|edit --thinking <level> تجاوز التفكير لكل مهمة؛ يزيل cron edit <job-id> --clear-thinking هذا التجاوز بحيث تتبع المهمة أسبقية التفكير العادية في Cron، ولا يمكن جمعه مع --thinking.
--model في Cron هو أساسي للمهمة، وليس تجاوز /model لجلسة محادثة. يعني ذلك:
- تظل احتياطيات النموذج المهيأة مطبقة عندما يفشل نموذج المهمة المحدد.
- تستبدل حمولة
fallbacksلكل مهمة قائمة الاحتياطيات المهيأة عند وجودها. - تجعل قائمة الاحتياطيات الفارغة لكل مهمة (
--fallbacks ""أوfallbacks: []في حمولة المهمة/API) تشغيل Cron صارماً. - عندما تكون لدى مهمة قيمة
--modelولكن لا توجد قائمة احتياطيات مهيأة، يمرر OpenClaw تجاوز احتياطيات فارغاً صريحاً حتى لا يُلحق الأساسي الخاص بالوكيل كهدف إعادة محاولة مخفي. - تمر فحوصات التمهيد لمزوّد محلي عبر الاحتياطيات المهيأة قبل تعليم تشغيل Cron بأنه
skipped.
يبلغ openclaw doctor عن المهام التي لديها payload.model معين بالفعل، بما في ذلك أعداد مساحات أسماء المزوّدين وعدم التطابق مع agents.defaults.model. استخدم هذا الفحص عندما يبدو سلوك المصادقة أو المزوّد أو الفوترة مختلفاً بين المحادثة الحية والمهام المجدولة.
أسبقية نموذج Cron المعزول
يحل Cron المعزول النموذج النشط بهذا الترتيب:
- تجاوز ربط Gmail.
--modelلكل مهمة.- تجاوز نموذج جلسة Cron المخزن (عندما يختار المستخدم واحداً).
- اختيار نموذج الوكيل أو النموذج الافتراضي.
الوضع السريع
يتبع الوضع السريع في Cron المعزول اختيار النموذج الحي المحلول. تنطبق تهيئة النموذج params.fastMode افتراضياً، لكن تجاوز الجلسة المخزن fastMode يظل يتغلب على التهيئة. عندما يكون الوضع المحلول هو auto، يستخدم الحد الفاصل قيمة params.fastAutoOnSeconds الخاصة بالنموذج المحدد، مع افتراض 60 ثانية.
إعادة محاولات تبديل النموذج الحي
إذا طرح تشغيل معزول LiveSessionModelSwitchError، يحتفظ Cron بالمزوّد والنموذج اللذين تم التبديل إليهما (وتجاوز ملف تعريف المصادقة الذي تم التبديل إليه عند وجوده) للتشغيل النشط قبل إعادة المحاولة. تقتصر حلقة إعادة المحاولة الخارجية على محاولتي تبديل بعد المحاولة الأولية، ثم تُجهض بدلاً من الدوران إلى الأبد.
مخرجات التشغيل والرفض
كتم الإقرارات القديمة
تكتم دورات Cron المعزولة الردود القديمة التي تقتصر على الإقرار. إذا كانت النتيجة الأولى مجرد تحديث حالة مؤقت ولا توجد دورة وكيل فرعي سليلة مسؤولة عن الإجابة النهائية، يعيد Cron المطالبة مرة واحدة للحصول على النتيجة الحقيقية قبل التسليم.
كتم الرمز الصامت
إذا أعادت عملية Cron معزولة رمز الصمت فقط (NO_REPLY أو no_reply)، فإن Cron يمنع كلاً من التسليم الصادر المباشر ومسار ملخص قائمة الانتظار الاحتياطي، لذلك لا يُنشر أي شيء في الدردشة.
حالات الرفض المنظمة
تستخدم عمليات Cron المعزولة بيانات التعريف المنظمة لرفض التنفيذ من التشغيل المضمن باعتبارها إشارة الرفض المعتمدة. كما أنها تراعي أغلفة UNAVAILABLE الخاصة بمضيف العقدة عندما تبدأ رسالة الخطأ المنظمة المتداخلة بـ SYSTEM_RUN_DENIED أو INVALID_REQUEST.
لا يصنف Cron نثر المخرجات النهائية أو عبارات الرفض التي تبدو كرفض موافقة على أنها حالات رفض ما لم يوفر التشغيل المضمن أيضًا بيانات تعريف رفض منظمة، لذلك لا يُعامل نص المساعد العادي كأمر محظور.
يعرض cron list وسجل التشغيل سبب الرفض بدلاً من الإبلاغ عن الأمر المحظور كـ ok.
الاحتفاظ
يتم التحكم في الاحتفاظ والتقليم عبر الإعدادات:
cron.sessionRetention(الافتراضي24h) يقلّم جلسات التشغيل المعزولة المكتملة.cron.runLog.keepLinesيقلّم صفوف سجل التشغيل المحتفظ بها في SQLite لكل مهمة. يظلcron.runLog.maxBytesمقبولاً للتوافق مع سجلات التشغيل الأقدم المدعومة بالملفات.
ترحيل المهام الأقدم
تعديلات شائعة
حدّث إعدادات التسليم دون تغيير الرسالة:
openclaw cron edit <job-id> --announce --channel telegram --to "123456789"عطّل التسليم لمهمة معزولة:
openclaw cron edit <job-id> --no-deliverفعّل سياق تمهيد خفيف لمهمة معزولة:
openclaw cron edit <job-id> --light-contextأعلن إلى قناة محددة:
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"أعلن إلى موضوع منتدى Telegram:
openclaw cron edit <job-id> --announce --channel telegram --to "-1001234567890" --thread-id 42أنشئ مهمة معزولة بسياق تمهيد خفيف:
openclaw cron create "0 7 * * *" \ "Summarize overnight updates." \ --name "Lightweight morning brief" \ --session isolated \ --light-context \ --no-deliverينطبق --light-context على مهام دور الوكيل المعزولة فقط. بالنسبة إلى عمليات Cron، يُبقي الوضع الخفيف سياق التمهيد فارغًا بدلاً من حقن مجموعة تمهيد مساحة العمل الكاملة.
أنشئ مهمة أمر مع argv وcwd وenv وstdin وحدود مخرجات دقيقة:
openclaw cron create "*/30 * * * *" \ --name "Position export" \ --command-argv '["node","scripts/export-position.mjs"]' \ --command-cwd "/srv/app" \ --command-env "NODE_ENV=production" \ --command-input '{"mode":"summary"}' \ --timeout-seconds 120 \ --no-output-timeout-seconds 30 \ --output-max-bytes 65536 \ --webhook "https://example.invalid/openclaw/cron"أوامر إدارية شائعة
التشغيل اليدوي والفحص:
openclaw cron listopenclaw cron list --agent opsopenclaw cron get <job-id>openclaw cron show <job-id>openclaw cron run <job-id>openclaw cron run <job-id> --dueopenclaw cron run <job-id> --wait --wait-timeout 10mopenclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2sopenclaw cron runs --id <job-id> --limit 50openclaw cron runs --id <job-id> --run-id <run-id>يعرض openclaw cron list جميع المهام المطابقة افتراضيًا. مرّر --agent <id> لعرض المهام التي يطابق معرّف وكيلها المطبّع الفعّال فقط؛ وتُحسب المهام التي لا تملك معرّف وكيل مخزنًا كوكيل الإعداد الافتراضي.
يعيد openclaw cron get <job-id> ملف JSON المخزن للمهمة مباشرة. استخدم cron show <job-id> عندما تريد العرض المقروء للبشر مع معاينة مسار التسليم.
يتضمن cron list --json وcron show <job-id> --json حقلاً من المستوى الأعلى باسم status في كل مهمة، محسوبًا من enabled وstate.runningAtMs وstate.lastRunStatus. القيم: disabled أو running أو ok أو error أو skipped أو idle. يعكس هذا عمود الحالة المقروء للبشر بحيث يمكن للأدوات الخارجية قراءة حالة المهمة دون إعادة اشتقاقها.
تتضمن إدخالات cron runs تشخيصات تسليم تحتوي على هدف Cron المقصود، والهدف المحلول، وإرسالات أداة الرسائل، واستخدام الاحتياطي، وحالة التسليم.
إعادة استهداف الوكيل والجلسة:
openclaw cron edit <job-id> --agent opsopenclaw cron edit <job-id> --clear-agentopenclaw cron edit <job-id> --session currentopenclaw cron edit <job-id> --session "session:daily-brief"يحذر openclaw cron add عندما يُحذف --agent في مهام دور الوكيل ويرجع إلى الوكيل الافتراضي (main). مرّر --agent <id> عند الإنشاء لتثبيت وكيل محدد.
تعديلات التسليم:
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"openclaw cron edit <job-id> --webhook "https://example.invalid/openclaw/cron"openclaw cron edit <job-id> --best-effort-deliveropenclaw cron edit <job-id> --no-best-effort-deliveropenclaw cron edit <job-id> --no-deliver