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" ตัวอย่างจะแสดงว่าเส้นทางแก้ค่าจากเซสชันหลักหรือเซสชันปัจจุบัน หรือจะล้มเหลวแบบปิด

เป้าหมายที่มีคำนำหน้าผู้ให้บริการช่วยแยกแยะช่องประกาศที่ยังแก้ค่าไม่ได้ ตัวอย่างเช่น to: "telegram:123" เลือก Telegram เมื่อ delivery.channel ถูกละไว้หรือเป็น last เฉพาะคำนำหน้าที่ 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 การยืนยันตัวตน prompt และการตั้งค่า CLI จะถูกรายงานเป็นความล้มเหลวของ Cron ก่อนโมเดล

การจัดกำหนดการ

งานครั้งเดียว

--at <datetime> จัดกำหนดการการรันครั้งเดียว วันที่เวลาแบบไม่มีออฟเซ็ตจะถูกถือเป็น UTC เว้นแต่คุณจะส่ง --tz <iana> ด้วย ซึ่งจะตีความเวลาตามนาฬิกาในเขตเวลาที่กำหนด

งานที่เกิดซ้ำ

งานที่เกิดซ้ำใช้การหน่วงเวลาลองใหม่แบบเอ็กซ์โพเนนเชียลหลังเกิดข้อผิดพลาดติดต่อกัน: 30 วินาที, 1 นาที, 5 นาที, 15 นาที, 60 นาที กำหนดการจะกลับสู่ปกติหลังการรันครั้งถัดไปสำเร็จ

การรันที่ถูกข้ามจะถูกติดตามแยกจากข้อผิดพลาดการดำเนินการ การรันเหล่านั้นไม่ส่งผลต่อการหน่วงเวลาลองใหม่ แต่ 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 อยู่ใน jobs.json ส่วนสถานะรันไทม์ที่รอดำเนินการอยู่ใน jobs-state.json หาก jobs.json ถูกแก้ไขจากภายนอก Gateway จะโหลดกำหนดการที่เปลี่ยนใหม่และล้างสล็อตที่รอดำเนินการที่ล้าสมัย การเขียนใหม่ที่เปลี่ยนเฉพาะการจัดรูปแบบจะไม่ล้างสล็อตที่รอดำเนินการ

การรันด้วยตนเอง

openclaw cron run ส่งคืนทันทีเมื่อการรันด้วยตนเองถูกเข้าคิวแล้ว การตอบกลับที่สำเร็จจะรวม { ok: true, enqueued: true, runId } ใช้ openclaw cron runs --id <job-id> เพื่อติดตามผลลัพธ์สุดท้าย

โมเดล

cron add|edit --model <ref> เลือกโมเดลที่อนุญาตสำหรับงาน

Cron --model เป็น ค่าหลักของงาน ไม่ใช่การแทนที่ /model ของเซสชันแชท ซึ่งหมายความว่า:

  • การถอยกลับของโมเดลที่กำหนดค่าไว้ยังคงมีผลเมื่อโมเดลงานที่เลือกไว้ล้มเหลว
  • fallbacks ในเพย์โหลดรายงานจะแทนที่รายการถอยกลับที่กำหนดค่าไว้เมื่อมีอยู่
  • รายการถอยกลับรายงานที่ว่างเปล่า (fallbacks: [] ในเพย์โหลด/API ของงาน) ทำให้การรัน Cron เข้มงวด
  • เมื่องานมี --model แต่ไม่ได้กำหนดค่ารายการถอยกลับ OpenClaw จะส่งการแทนที่การถอยกลับว่างเปล่าอย่างชัดเจน เพื่อไม่ให้ค่าหลักของเอเจนต์ถูกต่อท้ายเป็นเป้าหมายลองใหม่ที่ซ่อนอยู่

ลำดับความสำคัญของโมเดล Cron แบบแยก

Cron แบบแยกแก้ค่าโมเดลที่ใช้งานอยู่ตามลำดับนี้:

  1. การแทนที่จาก Gmail-hook
  2. --model รายงาน
  3. การแทนที่โมเดลของเซสชัน Cron ที่จัดเก็บไว้ (เมื่อผู้ใช้เลือกไว้)
  4. การเลือกโมเดลของเอเจนต์หรือโมเดลเริ่มต้น

โหมดเร็ว

โหมดเร็วของ Cron แบบแยกจะตามการเลือกโมเดลสดที่แก้ค่าแล้ว การกำหนดค่าโมเดล params.fastMode มีผลโดยค่าเริ่มต้น แต่การแทนที่ fastMode ของเซสชันที่จัดเก็บไว้ยังคงชนะการกำหนดค่า

การลองใหม่เมื่อสลับโมเดลสด

หากการรันแบบแยกโยน LiveSessionModelSwitchError Cron จะคงผู้ให้บริการและโมเดลที่สลับแล้ว (และการแทนที่โปรไฟล์การยืนยันตัวตนที่สลับแล้วเมื่อมี) สำหรับการรันที่ใช้งานอยู่ก่อนลองใหม่ วงรอบการลองใหม่ด้านนอกถูกจำกัดไว้ที่การลองใหม่จากการสลับสองครั้งหลังความพยายามแรก จากนั้นจะยกเลิกแทนที่จะวนซ้ำตลอดไป

เอาต์พุตการรันและการปฏิเสธ

การระงับการตอบรับที่ล้าสมัย

เทิร์น Cron แบบแยกจะระงับคำตอบที่เป็นเพียงการตอบรับล้าสมัย หากผลลัพธ์แรกเป็นเพียงการอัปเดตสถานะชั่วคราวและไม่มีการรันซับเอเจนต์สืบทอดที่รับผิดชอบคำตอบสุดท้าย Cron จะ prompt ซ้ำหนึ่งครั้งเพื่อขอผลลัพธ์จริงก่อนส่งมอบ

การระงับโทเค็นเงียบ

หากการรัน Cron แบบแยกส่งคืนเฉพาะโทเค็นเงียบ (NO_REPLY หรือ no_reply) Cron จะระงับทั้งการส่งออกโดยตรงและเส้นทางสรุปที่เข้าคิวสำรอง ดังนั้นจะไม่มีสิ่งใดถูกโพสต์กลับไปยังแชท

การปฏิเสธแบบมีโครงสร้าง

การรัน Cron แบบแยกต้องการเมทาดาทาการปฏิเสธการดำเนินการแบบมีโครงสร้างจากการรันที่ฝังอยู่ก่อน จากนั้นจึงถอยกลับไปใช้ตัวบ่งชี้การปฏิเสธที่รู้จักในเอาต์พุตสุดท้าย เช่น SYSTEM_RUN_DENIED, INVALID_REQUEST และวลีปฏิเสธการผูกกับการอนุมัติ

cron list และประวัติการรันจะแสดงเหตุผลการปฏิเสธแทนการรายงานคำสั่งที่ถูกบล็อกเป็น ok

การเก็บรักษา

การเก็บรักษาและการตัดทอนถูกควบคุมใน config:

  • 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 โหมดเบาจะเก็บบริบทบูตสแตรปให้ว่างเปล่าแทนการฉีดชุดบูตสแตรปเวิร์กสเปซทั้งหมด

คำสั่งผู้ดูแลทั่วไป

การรันด้วยตนเองและการตรวจสอบ:

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 รวมการวินิจฉัยการส่งมอบพร้อมเป้าหมาย Cron ที่ตั้งใจไว้ เป้าหมายที่แก้ค่าแล้ว การส่งด้วยเครื่องมือ message การใช้การสำรอง และสถานะการส่งมอบ

การกำหนดเป้าหมายเอเจนต์และเซสชันใหม่:

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) ส่ง --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?