---
read_when:
    - تريد مهام مجدولة وعمليات إيقاظ
    - أنت تصحح تنفيذ Cron والسجلات
summary: مرجع CLI لـ `openclaw cron` (جدولة مهام الخلفية وتشغيلها)
title: Cron
x-i18n:
    generated_at: "2026-07-01T08:04:58Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: aed39843e183b3d441908ad4ac0578d44b6f0d482905871efc3421fd9820a1cc
    source_path: cli/cron.md
    workflow: 16
---

# `openclaw cron`

إدارة مهام Cron لمجدول Gateway.

<Tip>
شغّل `openclaw cron --help` للاطلاع على كامل سطح الأوامر. راجع [مهام Cron](/ar/automation/cron-jobs) للدليل المفاهيمي.
</Tip>

## إنشاء المهام بسرعة

`openclaw cron create` هو اسم بديل لـ `openclaw cron add`. للمهام الجديدة، ضع الجدول أولاً والموجّه ثانياً:

```bash
openclaw cron create "0 7 * * *" \
  "Summarize overnight updates." \
  --name "Morning brief" \
  --agent ops
```

استخدم `--webhook <url>` عندما يجب أن ترسل المهمة حمولة النتيجة النهائية عبر POST بدلاً من تسليمها إلى هدف محادثة:

```bash
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 دون بدء تشغيل وكيل/نموذج معزول:

<Note>
مهام Cron الخاصة بالأوامر هي أتمتة Gateway يكتبها المسؤول. يتطلب إنشاؤها أو تعديلها
أو إزالتها أو تشغيلها يدوياً صلاحية `operator.admin`؛ أما التشغيل المجدول
لاحقاً فيُنفذ داخل عملية Gateway، وليس كاستدعاء أداة `tools.exec` من الوكيل.
تظل `tools.exec.*` وموافقات exec تتحكم في أدوات exec المرئية للنموذج.
</Note>

```bash
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>`.

<AccordionGroup>
  <Accordion title="مفاتيح الجلسات">
    - يربط `main` بجلسة الوكيل الرئيسية.
    - ينشئ `isolated` نصاً حوارياً جديداً ومعرّف جلسة جديداً لكل تشغيل.
    - يربط `current` بالجلسة النشطة وقت الإنشاء.
    - يثبّت `session:<id>` على مفتاح جلسة مستمر صريح.

  </Accordion>
  <Accordion title="دلالات الجلسة المعزولة">
    تعيد التشغيلات المعزولة ضبط سياق المحادثة المحيط. تتم إعادة ضبط توجيه القناة والمجموعة، وسياسة الإرسال/الطابور، والرفع، والأصل، وربط وقت تشغيل ACP للتشغيل الجديد. يمكن أن تنتقل التفضيلات الآمنة وتجاوزات النموذج أو المصادقة التي اختارها المستخدم صراحةً بين التشغيلات.
  </Accordion>
</AccordionGroup>

## التسليم

يعرض `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:` صيغة هدف مملوكة للقناة.

<Note>
تستخدم مهام `cron add` المعزولة افتراضياً التسليم عبر `--announce`. استخدم `--no-deliver` لإبقاء المخرجات داخلية. يظل `--deliver` اسماً بديلاً مهملاً لـ `--announce`.
</Note>

### ملكية التسليم

تسليم محادثة 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.

### تسليم الفشل

تُحل إشعارات الفشل بهذا الترتيب:

1. `delivery.failureDestination` في المهمة.
2. `cron.failureDestination` العام.
3. هدف الإعلان الأساسي للمهمة (عند عدم تعيين وجهة فشل صريحة).

<Note>
لا يجوز لمهام الجلسة الرئيسية استخدام `delivery.failureDestination` إلا عندما يكون وضع التسليم الأساسي هو `webhook`. تقبله المهام المعزولة في جميع الأوضاع.
</Note>

ملاحظة: تتعامل تشغيلات 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>`، الذي يفسر وقت الساعة الحائطية في المنطقة الزمنية المعطاة.

<Note>
تُحذف المهام لمرة واحدة بعد النجاح افتراضياً. استخدم `--keep-after-run` للاحتفاظ بها.
</Note>

### المهام المتكررة

تستخدم المهام المتكررة تراجع إعادة المحاولة الأسي بعد الأخطاء المتتالية: 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` المُعاد لفحص النتيجة اللاحقة:

```bash
openclaw cron run <job-id>
openclaw cron runs --id <job-id> --run-id <run-id>
```

أضف `--wait` عندما يجب أن يحظر نص برمجي التنفيذ حتى يسجل ذلك التشغيل المدرج تحديداً حالة نهائية:

```bash
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` أكبر من صفر.

<Note>
استخدم `--due` عندما تريد أن يعمل الأمر اليدوي فقط إذا كانت المهمة مستحقة حالياً. إذا لم يدرج `--due --wait` تشغيلاً في الطابور، يعيد الأمر استجابة عدم التشغيل العادية بدلاً من الاستطلاع.
</Note>

## النماذج

يحدد `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`.

<Warning>
إذا لم يكن النموذج مسموحاً أو تعذر حله، يفشل Cron التشغيل بخطأ تحقق صريح بدلاً من الرجوع إلى اختيار نموذج وكيل المهمة أو النموذج الافتراضي.
</Warning>

`--model` في Cron هو **أساسي للمهمة**، وليس تجاوز `/model` لجلسة محادثة. يعني ذلك:

- تظل احتياطيات النموذج المهيأة مطبقة عندما يفشل نموذج المهمة المحدد.
- تستبدل حمولة `fallbacks` لكل مهمة قائمة الاحتياطيات المهيأة عند وجودها.
- تجعل قائمة الاحتياطيات الفارغة لكل مهمة (`--fallbacks ""` أو `fallbacks: []` في حمولة المهمة/API) تشغيل Cron صارماً.
- عندما تكون لدى مهمة قيمة `--model` ولكن لا توجد قائمة احتياطيات مهيأة، يمرر OpenClaw تجاوز احتياطيات فارغاً صريحاً حتى لا يُلحق الأساسي الخاص بالوكيل كهدف إعادة محاولة مخفي.
- تمر فحوصات التمهيد لمزوّد محلي عبر الاحتياطيات المهيأة قبل تعليم تشغيل Cron بأنه `skipped`.

يبلغ `openclaw doctor` عن المهام التي لديها `payload.model` معين بالفعل، بما في ذلك أعداد مساحات أسماء المزوّدين وعدم التطابق مع `agents.defaults.model`. استخدم هذا الفحص عندما يبدو سلوك المصادقة أو المزوّد أو الفوترة مختلفاً بين المحادثة الحية والمهام المجدولة.

### أسبقية نموذج Cron المعزول

يحل Cron المعزول النموذج النشط بهذا الترتيب:

1. تجاوز ربط Gmail.
2. `--model` لكل مهمة.
3. تجاوز نموذج جلسة Cron المخزن (عندما يختار المستخدم واحداً).
4. اختيار نموذج الوكيل أو النموذج الافتراضي.

### الوضع السريع

يتبع الوضع السريع في 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` مقبولاً للتوافق مع سجلات التشغيل الأقدم المدعومة بالملفات.

## ترحيل المهام الأقدم

<Note>
إذا كانت لديك مهام Cron من قبل تنسيق التسليم والتخزين الحالي، فشغّل `openclaw doctor --fix`. يطبّع Doctor حقول Cron القديمة (`jobId`، و`schedule.cron`، وحقول التسليم في المستوى الأعلى بما في ذلك `threadId` القديم، وأسماء تسليم `provider` البديلة في الحمولة) ويرحّل مهام Webhook الاحتياطية ذات `notify: true` من `cron.webhook` إلى تسليم Webhook صريح. المهام التي تعلن بالفعل إلى دردشة تحتفظ بذلك التسليم وتحصل على وجهة Webhook للإكمال. عندما لا يكون `cron.webhook` مضبوطًا، تتم إزالة علامة `notify` الخاملة في المستوى الأعلى للمهام التي لا تملك هدف ترحيل (مع الحفاظ على التسليم الحالي دون تغيير)، لذلك لم يعد `doctor --fix` يكرر التحذير بشأنها.
</Note>

## تعديلات شائعة

حدّث إعدادات التسليم دون تغيير الرسالة:

```bash
openclaw cron edit <job-id> --announce --channel telegram --to "123456789"
```

عطّل التسليم لمهمة معزولة:

```bash
openclaw cron edit <job-id> --no-deliver
```

فعّل سياق تمهيد خفيف لمهمة معزولة:

```bash
openclaw cron edit <job-id> --light-context
```

أعلن إلى قناة محددة:

```bash
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"
```

أعلن إلى موضوع منتدى Telegram:

```bash
openclaw cron edit <job-id> --announce --channel telegram --to "-1001234567890" --thread-id 42
```

أنشئ مهمة معزولة بسياق تمهيد خفيف:

```bash
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 وحدود مخرجات دقيقة:

```bash
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"
```

## أوامر إدارية شائعة

التشغيل اليدوي والفحص:

```bash
openclaw cron list
openclaw cron list --agent ops
openclaw cron get <job-id>
openclaw cron show <job-id>
openclaw cron run <job-id>
openclaw cron run <job-id> --due
openclaw cron run <job-id> --wait --wait-timeout 10m
openclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2s
openclaw cron runs --id <job-id> --limit 50
openclaw 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 المقصود، والهدف المحلول، وإرسالات أداة الرسائل، واستخدام الاحتياطي، وحالة التسليم.

إعادة استهداف الوكيل والجلسة:

```bash
openclaw cron edit <job-id> --agent ops
openclaw cron edit <job-id> --clear-agent
openclaw cron edit <job-id> --session current
openclaw cron edit <job-id> --session "session:daily-brief"
```

يحذر `openclaw cron add` عندما يُحذف `--agent` في مهام دور الوكيل ويرجع إلى الوكيل الافتراضي (`main`). مرّر `--agent <id>` عند الإنشاء لتثبيت وكيل محدد.

تعديلات التسليم:

```bash
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-deliver
openclaw cron edit <job-id> --no-best-effort-deliver
openclaw cron edit <job-id> --no-deliver
```

## ذات صلة

- [مرجع CLI](/ar/cli)
- [المهام المجدولة](/ar/automation/cron-jobs)
