CLI commands

Cron

Edit source

openclaw cron

کارهای Cron را برای زمان‌بند Gateway مدیریت کنید.

نشست‌ها

--session مقدارهای main، isolated، current، یا session:<id> را می‌پذیرد.

کلیدهای نشست
  • main به نشست اصلی عامل متصل می‌شود.
  • isolated برای هر اجرا یک رونوشت و شناسه نشست تازه می‌سازد.
  • current در زمان ایجاد به نشست فعال متصل می‌شود.
  • session:<id> به یک کلید نشست پایدار صریح سنجاق می‌شود.
معنای نشست ایزوله

اجراهای ایزوله زمینه گفت‌وگوی محیطی را بازنشانی می‌کنند. مسیریابی کانال و گروه، سیاست ارسال/صف، ارتقا، مبدا، و اتصال زمان اجرای ACP برای اجرای تازه بازنشانی می‌شوند. ترجیحات امن و مدل صریح انتخاب‌شده توسط کاربر یا بازنویسی‌های احراز هویت می‌توانند بین اجراها منتقل شوند.

تحویل

openclaw cron list و openclaw cron show <job-id> مسیر تحویل حل‌شده را پیش‌نمایش می‌کنند. برای channel: "last"، پیش‌نمایش نشان می‌دهد که مسیر از نشست اصلی یا فعلی حل شده است، یا به‌صورت بسته شکست خواهد خورد.

هدف‌های دارای پیشوند ارائه‌دهنده می‌توانند کانال‌های اعلام حل‌نشده را رفع ابهام کنند. برای مثال، وقتی delivery.channel حذف شده یا last است، to: "telegram:123"، Telegram را انتخاب می‌کند. فقط پیشوندهایی که Plugin بارگذاری‌شده اعلام می‌کند، انتخاب‌گر ارائه‌دهنده هستند. اگر delivery.channel صریح باشد، پیشوند باید با آن کانال مطابقت داشته باشد؛ channel: "whatsapp" همراه با to: "telegram:123" رد می‌شود. پیشوندهای سرویس مانند imessage: و sms: همچنان نحو هدف متعلق به کانال باقی می‌مانند.

مالکیت تحویل

تحویل گفت‌وگوی Cron ایزوله بین عامل و اجراکننده مشترک است:

  • عامل می‌تواند وقتی مسیر گفت‌وگو در دسترس است، مستقیما با ابزار message ارسال کند.
  • announce فقط وقتی عامل مستقیما به هدف حل‌شده ارسال نکرده باشد، پاسخ نهایی را به‌صورت جایگزین تحویل می‌دهد.
  • webhook بار نهایی‌شده را به یک URL ارسال می‌کند.
  • none تحویل جایگزین اجراکننده را غیرفعال می‌کند.

--announce تحویل جایگزین اجراکننده برای پاسخ نهایی است. --no-deliver آن جایگزین را غیرفعال می‌کند اما وقتی مسیر گفت‌وگو در دسترس است، ابزار message عامل را حذف نمی‌کند.

یادآورها که از یک گفت‌وگوی فعال ساخته می‌شوند، هدف تحویل گفت‌وگوی زنده را برای تحویل اعلام جایگزین حفظ می‌کنند. کلیدهای نشست داخلی ممکن است حروف کوچک باشند؛ از آن‌ها به‌عنوان منبع حقیقت برای شناسه‌های ارائه‌دهنده حساس به بزرگی و کوچکی حروف، مانند شناسه‌های اتاق Matrix، استفاده نکنید.

تحویل شکست

اعلان‌های شکست به این ترتیب حل می‌شوند:

  1. delivery.failureDestination روی کار.
  2. cron.failureDestination سراسری.
  3. هدف اعلام اصلی کار، وقتی مقصد شکست صریحی تنظیم نشده باشد.

نکته: اجراهای Cron ایزوله، شکست‌های عامل در سطح اجرا را حتی وقتی هیچ بار پاسخ تولید نشود، به‌عنوان خطای کار در نظر می‌گیرند؛ بنابراین شکست‌های مدل/ارائه‌دهنده همچنان شمارنده‌های خطا را افزایش می‌دهند و اعلان‌های شکست را فعال می‌کنند.

اگر یک اجرای ایزوله پیش از نخستین درخواست مدل زمان‌بر شود، openclaw cron show و openclaw cron runs خطایی ویژه مرحله، مانند setup timed out before runner start یا stalled before first model call (last phase: context-engine)، را شامل می‌شوند. برای ارائه‌دهنده‌های متکی به CLI، دیده‌بان پیش از مدل تا زمان شروع نوبت CLI خارجی فعال می‌ماند؛ بنابراین توقف‌های جست‌وجوی نشست، hook، احراز هویت، پرامپت، و راه‌اندازی CLI به‌عنوان شکست‌های Cron پیش از مدل گزارش می‌شوند.

زمان‌بندی

کارهای تک‌اجرا

--at <datetime> یک اجرای تک‌مرحله‌ای را زمان‌بندی می‌کند. تاریخ‌زمان‌های بدون offset به‌عنوان UTC در نظر گرفته می‌شوند، مگر اینکه --tz <iana> را هم پاس کنید، که زمان ساعت دیواری را در منطقه زمانی داده‌شده تفسیر می‌کند.

کارهای تکرارشونده

کارهای تکرارشونده پس از خطاهای پیاپی از عقب‌نشینی نمایی تلاش مجدد استفاده می‌کنند: 30s، 1m، 5m، 15m، 60m. زمان‌بندی پس از اجرای موفق بعدی به حالت عادی برمی‌گردد.

اجراهای ردشده جدا از خطاهای اجرا ردیابی می‌شوند. آن‌ها روی عقب‌نشینی تلاش مجدد اثر نمی‌گذارند، اما openclaw cron edit <job-id> --failure-alert-include-skipped می‌تواند هشدارهای شکست را در اعلان‌های تکراری اجرای ردشده وارد کند.

برای کارهای ایزوله‌ای که یک ارائه‌دهنده مدل محلی پیکربندی‌شده را هدف می‌گیرند، Cron پیش از شروع نوبت عامل یک پیش‌پرواز سبک ارائه‌دهنده اجرا می‌کند. ارائه‌دهنده‌های local loopback، شبکه خصوصی، و .local با api: "ollama" در /api/tags کاوش می‌شوند؛ ارائه‌دهنده‌های محلی سازگار با OpenAI مانند vLLM، SGLang، و LM Studio در /models کاوش می‌شوند. اگر endpoint در دسترس نباشد، اجرا به‌عنوان skipped ثبت می‌شود و در زمان‌بندی بعدی دوباره تلاش می‌شود؛ endpointهای مرده مطابق برای 5 دقیقه cache می‌شوند تا از کوبیدن تعداد زیادی کار به همان سرور محلی جلوگیری شود.

نکته: تعریف‌های کار Cron در jobs.json زندگی می‌کنند، درحالی‌که وضعیت runtime در انتظار در jobs-state.json زندگی می‌کند. اگر jobs.json به‌صورت خارجی ویرایش شود، Gateway زمان‌بندی‌های تغییریافته را دوباره بارگذاری می‌کند و slotهای در انتظار stale را پاک می‌کند؛ بازنویسی‌های فقط قالب‌بندی، slot در انتظار را پاک نمی‌کنند.

اجراهای دستی

openclaw cron run به‌محض صف شدن اجرای دستی برمی‌گردد. پاسخ‌های موفق شامل { ok: true, enqueued: true, runId } هستند. برای دنبال کردن نتیجه نهایی، از openclaw cron runs --id <job-id> استفاده کنید.

مدل‌ها

cron add|edit --model <ref> یک مدل مجاز را برای کار انتخاب می‌کند.

--model در Cron یک اصلی کار است، نه یک بازنویسی /model نشست گفت‌وگو. یعنی:

  • fallbackهای مدل پیکربندی‌شده همچنان وقتی مدل انتخاب‌شده کار شکست بخورد اعمال می‌شوند.
  • fallbacks در بار هر کار، وقتی وجود داشته باشد، فهرست fallback پیکربندی‌شده را جایگزین می‌کند.
  • یک فهرست fallback خالی در هر کار (fallbacks: [] در بار/API کار) اجرای Cron را سخت‌گیرانه می‌کند.
  • وقتی کاری --model دارد اما هیچ فهرست fallback پیکربندی نشده است، OpenClaw یک بازنویسی fallback خالی صریح پاس می‌کند تا مدل اصلی عامل به‌عنوان هدف تلاش مجدد پنهان افزوده نشود.

تقدم مدل Cron ایزوله

Cron ایزوله مدل فعال را به این ترتیب حل می‌کند:

  1. بازنویسی Gmail-hook.
  2. --model هر کار.
  3. بازنویسی مدل ذخیره‌شده نشست Cron، وقتی کاربر یکی را انتخاب کرده باشد.
  4. انتخاب مدل عامل یا پیش‌فرض.

حالت سریع

حالت سریع Cron ایزوله از انتخاب مدل زنده حل‌شده پیروی می‌کند. پیکربندی مدل params.fastMode به‌طور پیش‌فرض اعمال می‌شود، اما بازنویسی نشست ذخیره‌شده fastMode همچنان بر پیکربندی مقدم است.

تلاش‌های مجدد تغییر مدل زنده

اگر یک اجرای ایزوله LiveSessionModelSwitchError پرتاب کند، Cron ارائه‌دهنده و مدل تغییر‌یافته، و وقتی موجود باشد بازنویسی پروفایل احراز هویت تغییر‌یافته، را پیش از تلاش مجدد برای اجرای فعال پایدار می‌کند. حلقه تلاش مجدد بیرونی پس از تلاش اولیه به دو تلاش مجدد تغییر محدود می‌شود، سپس به‌جای حلقه بی‌پایان متوقف می‌شود.

خروجی اجرا و ردها

سرکوب تایید کهنه

نوبت‌های Cron ایزوله پاسخ‌های فقط تاییدی کهنه را سرکوب می‌کنند. اگر نخستین نتیجه فقط یک به‌روزرسانی وضعیت میانی باشد و هیچ اجرای subagent فرزند مسئول پاسخ نهایی نباشد، Cron پیش از تحویل یک بار دیگر برای نتیجه واقعی prompt می‌کند.

سرکوب توکن خاموش

اگر یک اجرای Cron ایزوله فقط توکن خاموش (NO_REPLY یا no_reply) را برگرداند، Cron هم تحویل مستقیم خروجی و هم مسیر خلاصه صف‌شده جایگزین را سرکوب می‌کند، بنابراین چیزی به گفت‌وگو پست نمی‌شود.

ردهای ساختاریافته

اجراهای Cron ایزوله ابتدا فراداده رد اجرای ساختاریافته از اجرای embedded را ترجیح می‌دهند، سپس به نشانگرهای رد شناخته‌شده در خروجی نهایی، مانند SYSTEM_RUN_DENIED، INVALID_REQUEST، و عبارت‌های امتناع اتصال approval fallback می‌کنند.

cron list و تاریخچه اجرا دلیل رد را نشان می‌دهند، به‌جای اینکه یک فرمان مسدودشده را به‌عنوان ok گزارش کنند.

نگه‌داری

نگه‌داری و هرس در پیکربندی کنترل می‌شوند:

  • cron.sessionRetention (پیش‌فرض 24h) نشست‌های تکمیل‌شده اجرای ایزوله را هرس می‌کند.
  • cron.runLog.maxBytes و cron.runLog.keepLines فایل ~/.openclaw/cron/runs/<jobId>.jsonl را هرس می‌کنند.

مهاجرت کارهای قدیمی‌تر

ویرایش‌های رایج

به‌روزرسانی تنظیمات تحویل بدون تغییر پیام:

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 add \  --name "Lightweight morning brief" \  --cron "0 7 * * *" \  --session isolated \  --message "Summarize overnight updates." \  --light-context \  --no-deliver

--light-context فقط برای کارهای نوبت عامل ایزوله اعمال می‌شود. برای اجراهای Cron، حالت سبک زمینه راه‌اندازی را خالی نگه می‌دارد، به‌جای اینکه مجموعه کامل راه‌اندازی workspace را تزریق کند.

فرمان‌های رایج مدیر

اجرای دستی و بازرسی:

bash
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 runs --id <job-id> --limit 50

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 شامل diagnostics تحویل با هدف Cron موردنظر، هدف حل‌شده، ارسال‌های ابزار پیام، استفاده از fallback، و وضعیت تحویل‌شده هستند.

هدف‌گیری دوباره عامل و نشست:

bash
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) fallback می‌کند. برای سنجاق کردن یک عامل مشخص در زمان ایجاد، --agent <id> را پاس کنید.

تنظیمات جزئی تحویل:

bash
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"openclaw cron edit <job-id> --best-effort-deliveropenclaw cron edit <job-id> --no-best-effort-deliveropenclaw cron edit <job-id> --no-deliver

مرتبط

Was this useful?