CLI commands
Cron
openclaw cron
إدارة مهام Cron لبرنامج جدولة Gateway.
إنشاء المهام بسرعة
يمثل openclaw cron create اسمًا مستعارًا لـ openclaw cron add. بالنسبة إلى المهام الجديدة، ضع الجدول أولًا والموجّه ثانيًا:
openclaw cron create "0 7 * * *" \ "لخّص تحديثات الليلة الماضية." \ --name "الموجز الصباحي" \ --agent opsاستخدم --webhook <url> عندما ينبغي للمهمة إرسال الحمولة المكتملة عبر POST بدلًا من تسليمها إلى وجهة محادثة:
openclaw cron create "0 18 * * 1-5" \ "لخّص عمليات النشر اليوم بصيغة JSON." \ --name "ملخص النشر" \ --webhook "https://example.invalid/openclaw/cron"استخدم --command للمهام الحتمية الشبيهة بمهام الصدفة التي تعمل داخل Cron في OpenClaw من دون بدء تشغيل معزول لوكيل/نموذج:
openclaw cron create "*/15 * * * *" \ --name "فحص عمق قائمة الانتظار" \ --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 أو رسالة توقف تذكر آخر مرحلة بدء تشغيل معروفة (مثل 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 تضمين إشعارات عمليات التشغيل المتخطاة المتكررة ضمن تنبيهات الفشل.
بالنسبة إلى المهام المعزولة التي تستهدف موفّر نموذج محليًا ومهيأ (عنوان URL أساسي على الاسترجاع الحلقي، أو شبكة خاصة، أو .local)، يجري Cron فحصًا تمهيديًا خفيفًا للموفّر قبل بدء دور الوكيل: تُفحص موفّرات api: "ollama" عند /api/tags؛ وتُفحص موفّرات OpenAI المحلية المتوافقة الأخرى (api: "openai-completions"، مثل vLLM وSGLang وLM Studio) عند /models. إذا تعذر الوصول إلى نقطة النهاية، تُسجّل عملية التشغيل بوصفها skipped وتُعاد محاولتها في جدول لاحق؛ وتُخزّن نتيجة إمكانية الوصول مؤقتًا لكل نقطة نهاية لمدة 5 دقائق حتى لا تُغرق مهام كثيرة تستهدف الخادم المحلي نفسه ذلك الخادم بفحوص متكررة.
توجد مهام Cron وحالة وقت التشغيل المعلّقة وسجل التشغيل في قاعدة بيانات حالة SQLite المشتركة. تُستورد ملفات jobs.json و<name>-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 (الافتراضي 10m، مع الاستطلاع كل 2s افتراضيًا). يجب أن تكون قيمة --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 المعزولة بيانات تعريف رفض التنفيذ المنظمة من التشغيل المضمّن (أخطاء أداة التنفيذ الجسيمة ذات الرمز SYSTEM_RUN_DENIED أو INVALID_REQUEST) بوصفها إشارة الرفض المعتمدة. كما تراعي أغلفة مضيف Node ذات الرمز UNAVAILABLE حول خطأ منظم متداخل يحمل أحد هذين الرمزين.
لا يصنّف Cron نص المخرجات النهائية أو عبارات الرفض التي تبدو مرتبطة بالموافقة بوصفها حالات رفض ما لم يوفر التشغيل المضمّن أيضًا بيانات تعريف رفض منظمة، ولذلك لا يُعامل نص المساعد العادي بوصفه أمرًا محظورًا.
يعرض cron list وسجل التشغيل سبب الرفض بدلًا من الإبلاغ عن الأمر المحظور بوصفه ok.
الاحتفاظ
سلوك الاحتفاظ:
cron.sessionRetention(القيمة الافتراضية24h، أوfalseللتعطيل) يحذف جلسات التشغيل المعزولة المكتملة.- يحتفظ سجل التشغيل بأحدث 2000 صف نهائي لكل مهمة Cron. تحتفظ الصفوف المفقودة بنافذة التنظيف القياسية للمهام المفقودة ومدتها 24 ساعة.
ترحيل المهام القديمة
تعديلات شائعة
حدّث إعدادات التسليم دون تغيير الرسالة:
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 * * *" \ "لخّص تحديثات فترة الليل." \ --name "موجز صباحي خفيف" \ --session isolated \ --light-context \ --no-deliverينطبق --light-context على مهام دورات الوكيل المعزولة فقط. في تشغيلات Cron، يُبقي الوضع الخفيف سياق التمهيد فارغًا بدلًا من إدخال مجموعة تمهيد مساحة العمل الكاملة.
أنشئ مهمة أمر تتضمن argv وcwd وenv وstdin وحدود المخرجات بصورة دقيقة:
openclaw cron create "*/30 * * * *" \ --name "تصدير الموضع" \ --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. تظل حالة JSON معيارية ودون زخرفة كي تتمكن الأدوات الخارجية من قراءة حالة المهمة دون إعادة اشتقاقها؛ وقد يزيّن المخرج القابل للقراءة حالات error المتكررة بعدد حالات الفشل.
تتضمن إدخالات 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