22 KiB
| read_when | summary | title | x-i18n | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
CLI reference สำหรับ `openclaw cron` (ตั้งเวลาและเรียกใช้งานพื้นหลัง) | Cron |
|
openclaw cron
จัดการงาน Cron สำหรับตัวจัดกำหนดการของ Gateway
รัน `openclaw cron --help` เพื่อดูพื้นผิวคำสั่งทั้งหมด ดู [งาน Cron](/th/automation/cron-jobs) สำหรับคู่มือเชิงแนวคิดเซสชัน
--session รับค่า main, isolated, current หรือ session:<id>
การส่ง
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โพสต์เพย์โหลดที่เสร็จแล้วไปยัง URLnoneปิดใช้งานการส่งสำรองของตัวรัน
--announce คือการส่งสำรองของตัวรันสำหรับการตอบกลับสุดท้าย --no-deliver ปิดใช้งานการส่งสำรองนั้น แต่ไม่ได้ลบเครื่องมือ message ของเอเจนต์เมื่อมีเส้นทางแชต
การเตือนความจำที่สร้างจากแชตที่ใช้งานอยู่จะรักษาเป้าหมายการส่งแชตสดไว้สำหรับการส่งประกาศสำรอง คีย์เซสชันภายในอาจเป็นตัวพิมพ์เล็ก อย่าใช้เป็นแหล่งข้อมูลจริงสำหรับ ID ผู้ให้บริการที่ไวต่อรูปแบบตัวพิมพ์ เช่น ID ห้อง Matrix
การส่งเมื่อเกิดความล้มเหลว
การแจ้งเตือนความล้มเหลวแก้ค่าตามลำดับนี้:
delivery.failureDestinationบนงานcron.failureDestinationส่วนกลาง- เป้าหมายประกาศหลักของงาน (เมื่อไม่ได้ตั้งค่าปลายทางความล้มเหลวอย่างชัดเจน)
หมายเหตุ: การรัน Cron แบบแยกถือว่าความล้มเหลวของเอเจนต์ระดับการรันเป็นข้อผิดพลาดของงาน แม้เมื่อไม่มีเพย์โหลดตอบกลับถูกสร้างขึ้น ดังนั้นความล้มเหลวของโมเดล/ผู้ให้บริการยังคงเพิ่มตัวนับข้อผิดพลาดและทริกเกอร์การแจ้งเตือนความล้มเหลว
การกำหนดเวลา
งานแบบครั้งเดียว
--at <datetime> กำหนดเวลาการรันแบบครั้งเดียว วันที่เวลาที่ไม่มี offset จะถูกตีความเป็น UTC เว้นแต่คุณส่ง --tz <iana> ด้วย ซึ่งจะตีความเวลาตามนาฬิกาบนผนังในเขตเวลาที่กำหนด
งานที่เกิดซ้ำ
งานที่เกิดซ้ำใช้การถอยกลับแบบเอ็กซ์โพเนนเชียลหลังเกิดข้อผิดพลาดต่อเนื่อง: 30s, 1m, 5m, 15m, 60m ตารางเวลาจะกลับสู่ปกติหลังการรันที่สำเร็จครั้งถัดไป
การรันที่ถูกข้ามถูกติดตามแยกจากข้อผิดพลาดการดำเนินการ การรันเหล่านี้ไม่กระทบการถอยกลับเพื่อ retry แต่ openclaw cron edit <job-id> --failure-alert-include-skipped สามารถเลือกให้การแจ้งเตือนความล้มเหลวรวมการแจ้งเตือนการรันที่ถูกข้ามซ้ำได้
สำหรับงานแบบแยกที่กำหนดเป้าหมายไปยังผู้ให้บริการโมเดลที่กำหนดค่าไว้ภายในเครื่อง Cron จะรัน preflight ผู้ให้บริการแบบเบาก่อนเริ่มเทิร์นของเอเจนต์ ผู้ให้บริการ api: "ollama" แบบ Loopback, เครือข่ายส่วนตัว และ .local จะถูกตรวจที่ /api/tags; ผู้ให้บริการที่เข้ากันได้กับ OpenAI ภายในเครื่อง เช่น vLLM, SGLang และ LM Studio จะถูกตรวจที่ /models หาก endpoint เข้าถึงไม่ได้ การรันจะถูกบันทึกเป็น skipped และ retry ในกำหนดการภายหลัง; endpoint ที่ตรงกันและตายแล้วจะถูกแคชเป็นเวลา 5 นาทีเพื่อหลีกเลี่ยงไม่ให้งานจำนวนมากถล่มเซิร์ฟเวอร์ภายในเครื่องเดียวกัน
หมายเหตุ: นิยามงาน Cron อยู่ใน jobs.json ส่วนสถานะ runtime ที่ค้างอยู่จะอยู่ใน 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 ของเซสชันแชต นั่นหมายความว่า:
- fallback ของโมเดลที่กำหนดค่าไว้ยังคงมีผลเมื่อโมเดลงานที่เลือกไว้ล้มเหลว
fallbacksในเพย์โหลดรายงานจะแทนที่รายการ fallback ที่กำหนดค่าไว้เมื่อมีอยู่- รายการ fallback รายงานที่ว่างเปล่า (
fallbacks: []ในเพย์โหลด/API ของงาน) ทำให้การรัน Cron เข้มงวด - เมื่องานมี
--modelแต่ไม่มีรายการ fallback ที่กำหนดค่าไว้ OpenClaw จะส่งการแทนที่ fallback แบบว่างอย่างชัดเจน เพื่อไม่ให้รายการหลักของเอเจนต์ถูกผนวกเป็นเป้าหมาย retry ที่ซ่อนอยู่
ลำดับความสำคัญของโมเดล Cron แบบแยก
Cron แบบแยกแก้ค่าโมเดลที่ใช้งานตามลำดับนี้:
- การแทนที่จาก Gmail-hook
--modelรายงาน- การแทนที่โมเดลของเซสชัน Cron ที่จัดเก็บไว้ (เมื่อผู้ใช้เลือกไว้)
- การเลือกโมเดลของเอเจนต์หรือค่าเริ่มต้น
โหมดเร็ว
โหมดเร็วของ Cron แบบแยกตามการเลือกโมเดลสดที่แก้ค่าแล้ว ค่า config โมเดล params.fastMode มีผลตามค่าเริ่มต้น แต่การแทนที่ fastMode ของเซสชันที่จัดเก็บไว้ยังคงชนะ config
การ retry เมื่อสลับโมเดลสด
หากการรันแบบแยกโยน LiveSessionModelSwitchError Cron จะบันทึกผู้ให้บริการและโมเดลที่ถูกสลับแล้ว (และการแทนที่โปรไฟล์การยืนยันตัวตนที่ถูกสลับเมื่อมี) สำหรับการรันที่ใช้งานอยู่ก่อน retry ลูป retry ชั้นนอกถูกจำกัดไว้ที่การ retry การสลับสองครั้งหลังความพยายามแรก จากนั้นจะยกเลิกแทนที่จะวนลูปตลอดไป
เอาต์พุตการรันและการปฏิเสธ
การระงับการรับทราบที่ล้าสมัย
เทิร์น Cron แบบแยกระงับการตอบกลับที่เป็นเพียงการรับทราบที่ล้าสมัย หากผลลัพธ์แรกเป็นเพียงการอัปเดตสถานะชั่วคราวและไม่มีการรัน subagent สืบทอดที่รับผิดชอบคำตอบสุดท้าย Cron จะ prompt ซ้ำหนึ่งครั้งเพื่อขอผลลัพธ์จริงก่อนการส่ง
การระงับโทเค็นเงียบ
หากการรัน Cron แบบแยกคืนค่าเฉพาะโทเค็นเงียบ (NO_REPLY หรือ no_reply) Cron จะระงับทั้งการส่งออกโดยตรงและเส้นทางสรุปสำรองที่เข้าคิว ดังนั้นจะไม่มีอะไรถูกโพสต์กลับไปยังแชต
การปฏิเสธแบบมีโครงสร้าง
การรัน Cron แบบแยกจะให้ความสำคัญกับเมตาดาต้าการปฏิเสธการดำเนินการแบบมีโครงสร้างจากการรันที่ฝังไว้ก่อน จากนั้น fallback ไปยัง marker การปฏิเสธที่รู้จักในเอาต์พุตสุดท้าย เช่น SYSTEM_RUN_DENIED, INVALID_REQUEST และวลีปฏิเสธการผูก approval
cron list และประวัติการรันจะแสดงเหตุผลการปฏิเสธ แทนที่จะรายงานคำสั่งที่ถูกบล็อกเป็น ok
การเก็บรักษา
การเก็บรักษาและการตัดทิ้งถูกควบคุมใน config:
cron.sessionRetention(ค่าเริ่มต้น24h) ตัดเซสชันการรันแบบแยกที่เสร็จแล้วcron.runLog.maxBytesและcron.runLog.keepLinesตัด~/.openclaw/cron/runs/<jobId>.jsonl
การย้ายงานเก่า
หากคุณมีงาน Cron จากก่อนรูปแบบการส่งและ store ปัจจุบัน ให้รัน `openclaw doctor --fix` Doctor จะปรับฟิลด์ Cron เก่าให้เป็นปกติ (`jobId`, `schedule.cron`, ฟิลด์การส่งระดับบนรวมถึง `threadId` เก่า, นามแฝงการส่ง `provider` ในเพย์โหลด) และย้ายงาน fallback Webhook แบบง่ายที่ใช้ `notify: true` ไปเป็นการส่ง Webhook อย่างชัดเจนเมื่อ `cron.webhook` ถูกกำหนดค่าไว้การแก้ไขทั่วไป
อัปเดตการตั้งค่าการส่งโดยไม่เปลี่ยนข้อความ:
openclaw cron edit <job-id> --announce --channel telegram --to "123456789"
ปิดใช้งานการส่งสำหรับงานแบบแยก:
openclaw cron edit <job-id> --no-deliver
เปิดใช้งานบริบท bootstrap แบบเบาสำหรับงานแบบแยก:
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
สร้างงานแบบแยกพร้อมบริบท bootstrap แบบเบา:
openclaw cron add \
--name "Lightweight morning brief" \
--cron "0 7 * * *" \
--session isolated \
--message "Summarize overnight updates." \
--light-context \
--no-deliver
--light-context ใช้กับงาน agent-turn แบบแยกเท่านั้น สำหรับการรัน Cron โหมดเบาจะคงบริบท bootstrap ให้ว่างแทนที่จะฉีดชุด bootstrap ของ workspace ทั้งหมด
คำสั่งผู้ดูแลทั่วไป
การรันด้วยตนเองและการตรวจสอบ:
openclaw cron list
openclaw cron show <job-id>
openclaw cron run <job-id>
openclaw cron run <job-id> --due
openclaw cron runs --id <job-id> --limit 50
รายการ cron runs มี diagnostics การส่งพร้อมเป้าหมาย Cron ที่ตั้งใจไว้ เป้าหมายที่แก้ค่าแล้ว การส่งผ่านเครื่องมือ message การใช้ fallback และสถานะการส่งสำเร็จ
การกำหนดเป้าหมายเอเจนต์และเซสชันใหม่:
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 ถูกละไว้ในงาน agent-turn และ fallback ไปยังเอเจนต์เริ่มต้น (main) ส่ง --agent <id> ขณะสร้างเพื่อปักหมุดเอเจนต์ที่ระบุ
การปรับแต่งการส่ง:
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"
openclaw cron edit <job-id> --best-effort-deliver
openclaw cron edit <job-id> --no-best-effort-deliver
openclaw cron edit <job-id> --no-deliver